조회용 샘플 데이터


조회 : 지연 로딩과 조회 성능 최적화 (다대일)


엔티티를 DTO로 변환 → 페치 조인 최적화

@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(toList());
	return result;
}

//OrderRepository class 추가 코드
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로 변환 → 페치 조인 최적화 (distinct 사용)

@GetMapping("/api/v3/orders")
public List<OrderDto> ordersV3() {
	List<Order> orders = orderRepository.findAllWithItem();
	List<OrderDto> result = orders.stream()
																.map(o -> new OrderDto(o))
																.collect(toList());
	return result;
}

//OrderRepository class 추가 코드
public List<Order> findAllWithItem() {
	return em.createQuery("select distinct o from Order o" +
												" join fetch o.member m" +
												" join fetch o.delivery d" +
												" join fetch o.orderItems oi" +
												" join fetch oi.item i", Order.class)
												.getResultList();
}