jpashop : 컬렉션 조회 v6 (jpa -dto 직접조회, 플랫 데이터)

This commit is contained in:
kim
2021-01-27 22:33:20 +09:00
parent eb3ef708a5
commit b466b73105
4 changed files with 71 additions and 0 deletions

View File

@@ -4,6 +4,8 @@ import com.example.jpashop.domain.Order;
import com.example.jpashop.domain.OrderItem; import com.example.jpashop.domain.OrderItem;
import com.example.jpashop.repository.OrderRepository; import com.example.jpashop.repository.OrderRepository;
import com.example.jpashop.repository.OrderSearch; import com.example.jpashop.repository.OrderSearch;
import com.example.jpashop.repository.order.query.OrderFlatDto;
import com.example.jpashop.repository.order.query.OrderItemQueryDto;
import com.example.jpashop.repository.order.query.OrderQueryDto; import com.example.jpashop.repository.order.query.OrderQueryDto;
import com.example.jpashop.repository.order.query.OrderQueryRepository; import com.example.jpashop.repository.order.query.OrderQueryRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -14,6 +16,8 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
public class OrderApiController { public class OrderApiController {
@@ -68,4 +72,16 @@ public class OrderApiController {
public List<OrderQueryDto> ordersV5() { public List<OrderQueryDto> ordersV5() {
return orderQueryRepository.findAllByDto_optimization(); return orderQueryRepository.findAllByDto_optimization();
} }
@GetMapping("/api/v6/orders")
public List<OrderQueryDto> ordersV6() {
List<OrderFlatDto> flats = orderQueryRepository.findAllByDto_flat();
return flats.stream()
.collect(groupingBy(o -> new OrderQueryDto(o.getOrderId(), o.getName(), o.getOrderDate(), o.getOrderStatus(), o.getAddress()),
mapping(o -> new OrderItemQueryDto(o.getOrderId(), o.getItemName(), o.getOrderPrice(), o.getCount()), toList())
)).entrySet().stream()
.map(e -> new OrderQueryDto(e.getKey().getOrderId(), e.getKey().getName(), e.getKey().getOrderDate(), e.getKey().getOrderStatus(), e.getKey().getAddress(), e.getValue()))
.collect(toList());
}
} }

View File

@@ -0,0 +1,32 @@
package com.example.jpashop.repository.order.query;
import com.example.jpashop.domain.Address;
import com.example.jpashop.domain.OrderStatus;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class OrderFlatDto {
private Long orderId;
private String name;
private LocalDateTime orderDate;
private OrderStatus orderStatus;
private Address address;
private String itemName;
private int orderPrice;
private int count;
public OrderFlatDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address, String itemName, int orderPrice, int count) {
this.orderId = orderId;
this.name = name;
this.orderDate = orderDate;
this.orderStatus = orderStatus;
this.address = address;
this.itemName = itemName;
this.orderPrice = orderPrice;
this.count = count;
}
}

View File

@@ -4,11 +4,13 @@ import com.example.jpashop.domain.Address;
import com.example.jpashop.domain.OrderStatus; import com.example.jpashop.domain.OrderStatus;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@Data @Data
@EqualsAndHashCode(of = "orderId")
public class OrderQueryDto { public class OrderQueryDto {
private Long orderId; private Long orderId;
@@ -25,4 +27,13 @@ public class OrderQueryDto {
this.orderStatus = orderStatus; this.orderStatus = orderStatus;
this.address = address; this.address = address;
} }
public OrderQueryDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address, List<OrderItemQueryDto> orderItems) {
this.orderId = orderId;
this.name = name;
this.orderDate = orderDate;
this.orderStatus = orderStatus;
this.address = address;
this.orderItems = orderItems;
}
} }

View File

@@ -34,6 +34,18 @@ public class OrderQueryRepository {
return result; return result;
} }
public List<OrderFlatDto> findAllByDto_flat() {
return em.createQuery(
"select new com.example.jpashop.repository.order.query.OrderFlatDto(o.id, m.name, o.orderDate, o.status, d.address, i.name, oi.orderPrice, oi.count)" +
" from Order o" +
" join o.member m" +
" join o.delivery d" +
" join o.orderItems oi" +
" join oi.item i", OrderFlatDto.class)
.getResultList();
}
private Map<Long, List<OrderItemQueryDto>> findOrderItemMap(List<Long> orderIds) { private Map<Long, List<OrderItemQueryDto>> findOrderItemMap(List<Long> orderIds) {
List<OrderItemQueryDto> orderItems = em.createQuery( List<OrderItemQueryDto> orderItems = em.createQuery(
"select new com.example.jpashop.repository.order.query.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count)" + "select new com.example.jpashop.repository.order.query.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count)" +