코드 그라데이션

shop 구현 (10) 상품 관리하기 페이지 본문

Spring/SpringShop

shop 구현 (10) 상품 관리하기 페이지

완벽한 장면 2023. 7. 15. 09:48

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 부분은 타임리프 문법 $, *, # 정도만 알고 있으면 매핑하는 데 큰 무리는 없다.

 

 

728x90
Comments