페이징처리전

페이지 (Page / Pageable / 페이징 버튼)

main.html

 <button onclick="location.href='/menu/list?page=3&sort=menuCode,desc'">
	 메뉴 전체 목록 보기(3페이지 부터)
 </button>

1) 요청이 들어오면: Pageable 자동 바인딩

2) 서비스에서: PageRequest로 최종 Pageable 확정

 public Page<MenuDTO> findMenuList(**Pageable pageable)**{
		**pageable = PageRequest.of(
    pageable.getPageNumber() <= 0 ? 0 : pageable.getPageNumber() - 1, // 1→0 보정
    pageable.getPageSize(),
    Sort.by("menuCode").descending());**
    Page<Menu> menuList = menuRepository.findAll(pageable);
    /* 설명. Page 자체로 stream이다. */
    return menuList
           .map(menu -> modelMapper.map(menu, MenuDTO.class));
}

3) 레포지토리에서: findAll(Pageable)Page<Menu>

MenuRepository 인터페이스

// 서비스에서 레포로 findAll(pageable)
Page<Menu> menuList = menuRepository.**findAll(pageable);**
// 인터페이스는 콩이 될 수 없다
// JpaRepository를 상속받음으로써 스프링이 하위구현체 객체를 만들어서 콩으로 만들어준다.
**public interface MenuRepository
        extends JpaRepository<Menu, Integer>** {
// 제네릭안에 객체타입과 pk타입을 넣어준다.
}

4) Page → DTO로 변환: Page#map(...)