본문 바로가기
개발자 전향 프로젝트

[Spring Boot] 페이징이 어렵다고? 이렇게만 하세요

by 샘오리 2022. 9. 24.

일단 VIEW 는 본인이 사용중인 템플릿에 아래 코드를 복붙한다 

  <div class="pagination">
    <ul>
    
      <li th:if="${nowPage != 1}">
        <a class="btn" th:href="@{/조회 URL}+'?page='+${nowPage-1}"><</a>
      </li>
      
      <li th:if="${endPage != 0}" th:each="page:${#numbers.sequence(startPage, endPage)}">
        <a class="btn" th:if="${page != nowPage}" th:href="@{/조회 URL}+'?page='+${page}" th:text="${page}"></a>
        <strong class="btn" th:if="${page == nowPage}" th:text="${page}"></strong>
      </li>
      
      <li th:if="${endPage == 0}" th:each="page:${#numbers.sequence(startPage, 1)}">
        <a class="btn" th:if="${page != nowPage}" th:href="@{/조회 URL}+'?page='+${page}" th:text="${page}"></a>
        <strong class="btn" th:if="${page == nowPage}" th:text="${page}"></strong>
      </li>
      
      <li th:if="${nowPage < totalPage}">
        <a class="btn" th:href="@{/조회 URL}+'?page='+${nowPage+1}">></a>
      </li>
      
    </ul>
  </div>

CONTROLLER

  @GetMapping("/아까 그 URL")
  String pagingList(Model model, Pageable pageable) {

    Page<사용하는 엔티티> p = null;
    p = 사용하는서비스.findPagingList(pageable, "idx");

    int totalPage = p.getTotalPages();
    int nowPage = p.getPageable().getPageNumber() + 1;
    int startPage = Math.max(nowPage - 4, 1);
    int endPage = Math.min(nowPage + 4, p.getTotalPages());

    model.addAttribute("boardList", p);
    <!-- 타임리프 th:each에 넣을것 매핑 
    예:  <tbody class="table-content" th:each="board : ${boardList}"> 
    -->
    
    model.addAttribute("totalPage", totalPage);
    model.addAttribute("nowPage", nowPage);
    model.addAttribute("startPage", startPage);
    model.addAttribute("endPage", endPage);

    return "사용하는 HTML";
  }

SERVICE

  //페이징하여 보드 반환
  public Page<사용하는 엔티티> findPagingList(Pageable pageable, String column) {

 <!-- 아까 가져온 그 idx 로 정렬하는 작업 -->
    Sort sort = Sort.by(column).descending();
    
 <!-- 페이지가 어디부터 시작해서 한 페이지에 몇개를 보여줄지 정하는 것 : 
 여기서는 1페이지부터 10개씩 보여주기로 정했다.
 -->
    pageable = PageRequest.of(pageable.getPageNumber() <= 0 ? 0 : pageable.getPageNumber() - 1,
        10,
        sort);
        
   <-- 사용하는 Repository에 모두 가져오도록 호출한 것 -->     
    return 사용하는 리포지토리.findAll(pageable);
  }

책장을~ 넘겨보자구