Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- JDBC
- transaction
- SpringBoot
- Exception
- Greedy
- 김영한
- http
- springdatajpa
- jpa
- 알고리즘
- 스프링
- 스프링 핵심 기능
- Proxy
- 인프런
- kotlin
- 스프링 핵심 원리
- java
- Android
- db
- Spring Boot
- 자바
- JPQL
- Servlet
- 백준
- pointcut
- 그리디
- QueryDSL
- spring
- AOP
- Thymeleaf
Archives
- Today
- Total
개발자되기 프로젝트
지연 로딩과 조회 성능 최적화(FETCH JOIN) 본문
1. Fetch Join을 활용
public List<Order> findAllWithMemberDelivery() {
return em.createQuery("select o from Order o " +
"join fetch o.member " +
"join fetch o.delivery", Order.class).getResultList();
}
- join fetch 를 통해 order를 가져오는 쿼리 한 번에 member와 delibery도 함께 조회한다.
@GetMapping("/api/v3/simple-orders")
public List<SimPleOrderDto> ordersV3(){
List<Order> orders = orderRepository.findAllWithMemberDelivery();
List<SimPleOrderDto> result = orders.stream()
.map(o -> new SimPleOrderDto(o))
.collect(Collectors.toList());
return result;
}
- 와! 쿼리 한번으로 끝났다.
Hibernate:
select
order0_.order_id as order_id1_6_0_,
member1_.member_id as member_i1_4_1_,
delivery2_.delivery_id as delivery1_2_2_,
order0_.delivery_id as delivery4_6_0_,
order0_.member_id as member_i5_6_0_,
order0_.order_date as order_da2_6_0_,
order0_.status as status3_6_0_,
member1_.city as city2_4_1_,
member1_.street as street3_4_1_,
member1_.zipcode as zipcode4_4_1_,
member1_.name as name5_4_1_,
delivery2_.city as city2_2_2_,
delivery2_.street as street3_2_2_,
delivery2_.zipcode as zipcode4_2_2_,
delivery2_.status as status5_2_2_
from
orders order0_
inner join
member member1_
on order0_.member_id=member1_.member_id
inner join
delivery delivery2_
on order0_.delivery_id=delivery2_.delivery_id
2. 정리
- 엔티티를 fetch join을 사용하여 쿼리 한 번으로 모두 조회함
- 페치 조인으로 인해 order -> member, order -> delivery 는 이미 조회된 상태로 지연로딩 적용될 필요 없음.
3. GitHiub : 210822 FETCH JOIN
'인프런 > [인프런] Springboot와 JPA활용 2' 카테고리의 다른 글
컬렉션 조회 최적화 (0) | 2021.08.24 |
---|---|
지연 로딩과 조회 성능 최적화(JPA에서 DTO 바로 조회) (0) | 2021.08.23 |
지연로딩과 성능최적화(DTO, N+1) (0) | 2021.08.22 |
지연로딩과 조회성능 최적화(엔티티 노출) (0) | 2021.08.22 |
API 개발 고급 소개 1 (0) | 2021.08.22 |
Comments