코드 그라데이션
shop 구현 (10) 상품 관리하기 페이지 본문
ItemController
@GetMapping(value = {"/admin/items", "/admin/items/{page}"})
public String itemManage(ItemSearchDto itemSearchDto, @PathVariable("page") Optional<Integer> page, Model model){
Pageable pageable = PageRequest.of(page.isPresent() ? page.get() : 0, 5);
Page<Item> items = itemService.getAdminItemPage(itemSearchDto, pageable);
model.addAttribute("items", items);
model.addAttribute("itemSearchDto", itemSearchDto);
model.addAttribute("maxPage", 5);
return "item/itemMng";
}
(value = {"/admin/items", "/admin/items/{page}"}) 똑같은 api인데 경로가 두 가지인 형태
Pageable은 요청할 때 사용. 페이지 조회할 때 Dto에 페이지 검색을 위한 정보와 페이지 정보를 넘기면 응답으로 페이지 결과가 올 것이고
Page<Item> items = itemService.getAdminItemPage(itemSearchDto, pageable);
model.addAttribute("items", items); 이걸 그대로 모델에 담으면 화면 개발자가 알맞게 화면에 보여줄 것이다.
-> 페이징 처리가 된 api가 추가된 것임.
검색 시에 사용하는 Dto도 추가
@Getter
@Setter
public class ItemSearchDto {
private String searchDateType;
private ItemSellStatus searchSellStatus;
private String searchBy;
private String searchQuery = "";
}
BaseEntity를 상속받음으로 인해서 모든 엔티티에서 regTime, updateTime 다 빠짐.
Customizing 해서 사용도 가능했다.
public interface ItemRepository extends JpaRepository<Item,Long>, QuerydslPredicateExecutor<Item>, ItemRepositoryCustom {
public interface ItemRepositoryCustom { // JpaRepository 상속 안 받는다.
page<Item> getAdminItemPage(ItemSearchDto itemSearchDto, Pageable pageable);
}
그런데 이거는 직접 구현을 해줘야 했다.
public class ItemRepositoryCustomImpl implements ItemRepositoryCustom 이렇게 구현체 생성
ItemService
@Transactional(readOnly = true)
public Page<Item> getAdminItemPage(ItemSearchDto itemSearchDto, Pageable pageable) {
return itemRepository.getAdminItemPage(itemSearchDto, pageable);
}
상품 관리하기 페이지 자체가 페이징이 적용된 api라고 볼 수 있음.
요청할 때 사용할 Pageable 응답할 때 사용할 Page
그래서 어드민으로 요청을 한 것이고 주요 관리들이 이루어진다.
Html 부분은 타임리프 문법 $, *, # 정도만 알고 있으면 매핑하는 데 큰 무리는 없다.
'Spring > SpringShop' 카테고리의 다른 글
shop 구현 (12) 상품 상세 페이지 (0) | 2023.07.20 |
---|---|
shop 구현 (11) 메인 페이지 만들기 (0) | 2023.07.19 |
shop 구현 (9) 특이한 상속구조 (0) | 2023.07.14 |
shop 구현 (8) 상품 수정하기 / 변경감지 (0) | 2023.07.14 |
shop 구현 (7) 상품 등록 (0) | 2023.07.13 |