์ฟผ๋ฆฌ ๋ฐฉ์ ์ ํ ์์
1. ์ฐ์ ์ํฐํฐ๋ฅผ DTO๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ ํ
/**
* V2. ์ํฐํฐ๋ฅผ ์กฐํํด์ DTO๋ก ๋ณํ(fetch join ์ฌ์ฉX)
* - ๋จ์ : ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ฟผ๋ฆฌ N๋ฒ ํธ์ถ
*/
@GetMapping("/api/v2/simple-orders")
public List<SimpleOrderDto> ordersV2() {
List<Order> orders = orderRepository.findAll();
List<SimpleOrderDto> result = orders.stream()
.map(o -> new SimpleOrderDto(o))
.collect(toList());
return result;
}
2. ํ์์ fetch join์ผ๋ก ์ฑ๋ฅ ์ต์ ํ
/**
* V3. ์ํฐํฐ๋ฅผ ์กฐํํด์ DTO๋ก ๋ณํ(fetch join ์ฌ์ฉO)
* - fetch join์ผ๋ก ์ฟผ๋ฆฌ 1๋ฒ ํธ์ถ
*/
@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;
}
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();
}
3. ๊ทธ๋๋ ์๋๋ฉด DTO๋ก ์ง์ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
/**
* V4. JPA์์ DTO๋ก ๋ฐ๋ก ์กฐํ
* - ์ฟผ๋ฆฌ 1๋ฒ ํธ์ถ
* - select ์ ์์ ์ํ๋ ๋ฐ์ดํฐ๋ง ์ ํํด์ ์กฐํ
*/
@GetMapping("/api/v4/simple-orders")
public List<OrderSimpleQueryDto> ordersV4() {
return orderSimpleQueryRepository.findOrderDtos();
}
public List<OrderSimpleQueryDto> findOrderDtos() {
return em.createQuery(
"select new jpabook.jpashop.repository.order.simplequery.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();
}
'๐ORM:JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปฌ๋ ์ fetch join์ ๋ํด (0) | 2023.09.01 |
---|---|
DTO์ getter๊ฐ ํ์ํ ์ด์ (0) | 2023.08.30 |
[spring-data-jpa] ํ์ด์ง๊ณผ ์ ๋ ฌ (0) | 2023.08.02 |
[spring-data-jpa] ์ฟผ๋ฆฌ ๋ฉ์๋ 3๊ฐ์ง (0) | 2023.08.01 |
๋ณ๊ฒฝ ๊ฐ์ง์ ๋ณํฉ (0) | 2023.07.18 |