
[Day-16] 간단한 주문 조회 V2: 엔티티를 DTO로 변환WEB JAVA SPRING/PROJECT2023. 8. 28. 10:53
Table of Contents
api 스펙에 딱 맞춰 출력이 됐다..
OrderSimpleApiController
@GetMapping("api/v2/simple-orders")
public List<SimpleOrderDto> ordersV2(){
//Order 그대로 반환하지 않고 dto로 변환하서 반환하자
List<Order> orders = orderRepository.findByString(new OrderSearch());
List<SimpleOrderDto> result = orders.stream()
.map(o-> new SimpleOrderDto(o))
.collect(Collectors.toList());
return result;
}
@Data
static class SimpleOrderDto{
//api 스펙 명확하게 규정
private Long orderId;
private String name;
private LocalDateTime orderDate;
private OrderStatus orderStatus;
private Address address;
public SimpleOrderDto(Order order){
orderId = order.getId();
name = order.getMember().getName();
orderDate = order.getOrderDate();
orderStatus = order.getStatus();
address = order.getDelivery().getAddress();
}
}
쿼리가 총 1 + N + N번 실행된다. (v1과 쿼리수 결과는 같다.)
- order 조회 1번(order 조회 결과 수가 N이 된다.)
- order -> member 지연 로딩 조회 N 번
- order -> delivery 지연 로딩 조회 N 번
예) order의 결과가 4개면 최악의 경우 1 + 4 + 4번 실행된다.(최악의 경우)
지연로딩은 영속성 컨텍스트에서 조회하므로, 이미 조회된 경우 쿼리를 생략한다
'WEB JAVA SPRING > PROJECT' 카테고리의 다른 글
1.로그인/로그아웃 (0) | 2023.09.12 |
---|---|
스타트 스프링 부트 -1~5장 (0) | 2023.08.28 |
[Day-15] rest api 엔티티 직접 노출 (0) | 2023.08.28 |
[Day-14] 회원등록/수정/조회 API (0) | 2023.08.25 |
[Day-13] 변경감지와 병합, 상품주문, 주문 목록 검색, 주문 취소 (0) | 2023.08.25 |