JPA활용2-회원조회_엔티티를_DTO로변환

언젠간·2022년 9월 23일
0

엔티티를 DTO로 변환

1. 단순 조회

	@GetMapping("/api/v2/simple-orders")
	public List<SimpleOrderDto> ordersV2(){
		
		//ORDER 2건이면,
		//1 + N(2건) N 문제 발생 (1 + 회원 N + 배송) 
		List<Order> orders = orderRepository.findAllByString(new OrderSearch());
		
		List<SimpleOrderDto> result = orders.stream()
			.map(o -> new SimpleOrderDto(o))
			.collect(Collectors.toList());
		
		return result;
	}
  • 단점
    • N+1 쿼리 문제 발생함

2. Fetch 조회

	@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;
		
	}
	
	//한 번에 모든 객체의 값을 채워서 리턴 = fetch join
	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();
	}
  • 장점
    • 쿼리 한 번만 실행
profile
코딩왕이될사나이

0개의 댓글