728x90
패치조인
// 컨트롤러
@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;
}
// DB 패치조인 조회
public List<Order> findAllWithMemberDelivery() {
return em.createQuery(
"select o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d", Order.class
).getResultList();
}
// DTO
@Data
class SimpleOrderDto{
private Long orderId;
private String name;
private LocalDateTime orderDate;
private OrderStatus orderStatus;
private Address address;
public SimpleOrderDto(Order order) {
this.orderId = order.getId();
this.name = order.getMember().getName();
this.orderDate = order.getOrderDate();
this.orderStatus = order.getStatus();
this.address = order.getDelivery().getAddress();
}
}
JPA DTO 바로 조회
성능은 패치조인보다 약간 빠르지만 코드 재활용성을 할 수 없다
public List<OrderSimpleQueryDto> findOrderDtos() {
return em.createQuery(
"select new jpabook.jpashop.repository.OrderSimpleQueryDto(o.id,m.name,o.orderDate,o.status,d.address)" +
" from Order o"+
" join o.member m" +
" join o.delivery d", OrderSimpleQueryDto.class)
.getResultList();
}
728x90
'백엔드 > JPA' 카테고리의 다른 글
스프링 데이터 jpa 벌크 쿼리 (0) | 2021.10.23 |
---|---|
스프링 data jpa 페이징 (0) | 2021.10.23 |
스프링 데이터 JPA 복잡한 정적 쿼리 @Query (0) | 2021.10.22 |
스프링 데이터 JPA 기초 (0) | 2021.10.22 |
Rest API 개발시 양뱡향 연관관계 주의할 점 (0) | 2021.10.18 |