본문 바로가기

전체 글

Querydsl join문 기본문법 조인 -기본 조인 -> Querydsl에서는 JOIN 함수도 역시 제공한다. join(), innerJoin(): 내부조인(inner join) leftJoin(): left외부조인(left outer join) rightJoin():right외부조인(right outer join) JPQL의 on과 성능 최적화를 위한 fetch 조인제공 그렇다면 연관관계가 없는 엔티티간의 조인은 어떻게 하는가? → 세타 조인 /** * 세타 조인 * 회원의 이름이 팀 이름과 같은 회원 조회 * * @throws Exception */ @Test public void theta_join() throws Exception { //given em.persist(new Member("teamA")); em.persist(ne.. 더보기
사용자 정의 리포지토리 구성 및 페이징처리 사용자 정의 리포지토리 사용법은 아래와 같다. 1. 사용자 정의 인터페이스 작성 2. 사용자 정의 인터페이스 구현 3. 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속 1. 사용자 정의 인터페이스 작성 package study.querydsl.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import study.querydsl.dto.MemberSearchCondition; import study.querydsl.dto.MemberTeamDto; import study.querydsl.entity.Member; import java.util.List; pu.. 더보기
querydsl 벌크연산 수행 주위사항 @Commit @Test public void bulkUpdate() throws Exception{ //member1=10->비회원 //member2=20->비회원 //member3=30->유지 //member4=40->유지 long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); //DB에서 꺼내온 데이터보다 영속성컨텍스트가 우선권을가짐 //벌크 연산후 flush와 clear을 해줘라 em.flush(); em.clear(); List result = queryFactory .selectFrom(member) .fetch(); for (Member member1 :.. 더보기
API 개발 고급 - 컬렉션 조회 최적화 정리 실전! 스프링부트와 JPA활용2 1. 엔티티 조회방식으로 우선 접근 A. 페치조인으로 쿼리수를 최적화 B. 컬렉션 최적화 i. 페이징필요 (hibernate.default_batch_fetch_size, @BatchSize 로 최적화 ii.페이징필요 x -> 페치조인사용 2. 엔티티조회방식으로 해결이 안되면 DTO조회방식사용 i. ToOne 관계에서는 V4를 사용하고 ii. ToMany관계에서는 V5를 사용하여 IN절을 활용해서 메모리에 미리조회해서 최적화를 시킨다. 3. DTO조회방식으로 해결이 안되면 NativeSQL or JdbcTemplate 참고: 엔티티 조회 방식은 페치 조인이나, hibernate.default_batch_fetch_size, @BatchSize 같이 코드를 거의 수정하지 않.. 더보기
API 개발 고급 - 컬렉션 조회 최적화 주문내역에서 추가로 주문한 상품정보를 추가로 조회해보자. Order을 기준으로 컬렉션인 OrderItem와 Item이 필요로합니다. 조회 성능최적화에서는 OneToOne ,ManyToOny관계만 있었다. 이번에는 컬렉션인일대다 관계(OneToMany)를 조회하고 최적화 하는 방법을 알아보겠습니다. 주문 조회 V1: 엔티티 직접 노출 package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderItem; import jpabook.jpashop.repository.OrderRepository; import jpabook.jpashop.repository.OrderSearch; import.. 더보기
API 개발 고급 -지연로딩과 조회 성능 최적화 주문 , 배송정보 , 회원을 조회하는 API를 여러방법으로 만들어봅니다.그러면서 지연로딩 때문에 발생하는 성능문제를 단계적으로 해결해보자. 간단한 주문조회 V1 :엔티티를 직접 노출 package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.repository.OrderRepository; import jpabook.jpashop.repository.OrderSearch; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bin.. 더보기
API 개발 기본 API 개발 기본 회원 등록 API 회원 등록 API - V1 package jpabook.jpashop.api; import jpabook.jpashop.domain.Member; import jpabook.jpashop.service.MemberService; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import j.. 더보기
Mysql 과 JpaData를 활용하여 만든 BoardService 1. build gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-v.. 더보기