코드 그라데이션
shop 구현 (14) 주문 이력 조회 본문
주문 이력 조회하기
@GetMapping(value = {"/orders", "/orders/{page}"})
public String orderHist(@PathVariable("page") Optional<Integer> page,
Principal principal, Model model){
Pageable pageable = PageRequest.of(page.isPresent() ? page.get() : 0, 5);
Page<OrderHistDto> orderHistDtoList = orderService.getOrderList(principal.getName(), pageable);
model.addAttribute("orders", orderHistDtoList);
model.addAttribute("page", pageable.getPageNumber());
model.addAttribute("maxPage",5);
return "/order/orderHist";
}
일단 페이징 처리란 책에 있는 페이지라고 생각하면 된다.
한줄로 쓰면 난잡하고 보기 어려우니까. 읽기 좋게 페이지로 구분하듯이.서버에서도 이점이 있다.
그래서 페이징은 정렬하고 관계있다기보다는 한 번에 가져올 때 얼마만큼의 양을 가져올 건지를 정하는 것이라고 생각하는 게 더 낫다.
만약 페이징 처리가 없다면?(하지 않았을 때)
데이터 양이 엄청난 경우,
메모리 한정된 자원에 이 데이터를 다 올린다고 생각하면 메모리 과부하.
전체 데이터를 사용자가 보고 싶다고 하더라도 개발자가 정한 양만큼 전체를 보여주면 된다.
그럼 메모리 부담도 당연히 줄어든다.
** 페이징을 할 때 굳이 정렬을 하지 않아도 된다. 이 두 개념은 사실상 같은 개념이라고 보기에는 어렵다.
페이징은 내가 보여줄 단위.일반적으로 정렬 해서 보여주기 때문에...
Pageable은 요청이고 Page는 응답.
for(Order order : orders){
OrderHistDto orderHistDto = new OrderHistDto(order);
List<OrderItem> orderItems = order.getOrderItems();
for(OrderItem orderItem : orderItems){
ItemImg itemImg = itemImgRepository
.findByItemIdAndRepImgYn(orderItem.getItem().getId(),"Y");
OrderItemDto orderItemDto = new OrderItemDto(orderItem, itemImg.getImgUrl());
orderHistDto.addOrderItemDto(orderItemDto);
}
orderHistDtos.add(orderHistDto);
그래서 이거는 가져온 5개의 주문을 보면서 주문이력을 만드는 과정.
주문이력에는 대표이미지가 들어간다.
'Spring > SpringShop' 카테고리의 다른 글
shop 구현 (16) 장바구니 담기, 장바구니에 내역 조회 (0) | 2023.07.24 |
---|---|
shop 구현 (15) 주문 취소하기 (0) | 2023.07.22 |
shop 구현 (13) 주문 기능 구현 (0) | 2023.07.21 |
shop 구현 (12) 상품 상세 페이지 (0) | 2023.07.20 |
shop 구현 (11) 메인 페이지 만들기 (0) | 2023.07.19 |