-
[스프링부트/웹 애플리케이션 개발]API 개발 고급-3Spring&SpringBoot 2023. 1. 12. 17:02
간단한 주문 조회V2 : 엔티티를 DTO로 변환
@GetMapping("/api/v2/simple-orders") public List<SimpleOrderDto> ordersV2() { List<Order> orders = orderRepository.findAllByString(new OrderSearch()); List<SimpleOrderDto> result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(Collectors.toList()); return result; } @Data static class SimpleOrderDto { 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(); } }
- 엔티티를 DTO로 변환하는 일반적인 방법이다.
- 쿼리가 총 1 + N + N번 실행된다. (v1과 쿼리수 결과는 같다.)
> order 조회 1번(order 조회 결과 수가 N이 된다.)
> order -> member 지연 로딩 조회 N 번
> order -> delivery 지연 로딩 조회 N 번
> 예) order의 결과가 4개면 최악의 경우 1 + 4 + 4번 실행된다.(최악의 경우)
> 지연로딩은 영속성 컨텍스트에서 조회하므로, 이미 조회된 경우 쿼리를 생략한다.
728x90'Spring&SpringBoot' 카테고리의 다른 글
[스프링부트/웹 애플리케이션 개발]API 개발 고급-5 (2) 2023.01.12 [스프링부트/웹 애플리케이션 개발]API 개발 고급-4 (1) 2023.01.12 [스프링부트/웹 애플리케이션 개발]API 개발 고급-2 (0) 2023.01.11 [스프링부트/웹 애플리케이션 개발]API 개발 고급-1 (1) 2023.01.11 [스프링부트/웹 애플리케이션 개발]회원 조회 API (0) 2023.01.11