Back-End/Spring

[Spring] Mybatis와 스프링 페이징 처리

윤고랭이 2021. 7. 28. 23:48

 

 

페이징 처리때 쓸 클래스 'Criteria'

 

전체목록을 페이지 별로 나눠서 보여줄려면, Criteria를 생성해야한다.

 

즉, 검색에 사용되는 여러 종류의 데이터를 하나의 객체로 묶기 위한 용도

 

 

@Getter 
@Setter
@ToString
public class Criteria {
 
   private int pageNum;
   private int amount;
   
   public Criteria() {
      this(1,10);
   }
   
   public Criteria(int pageNum, int amount) {
      this.pageNum = pageNum;
      this.amount = amount;
   }   
   
}

 

그리고 페이징을 할때는 조금의 산수가 필요하다...ㅠ

 

	private int curPage;          // 현재 페이지 번호
	private int rowSizePerPage;   // 한 페이지당 레코드 수
	private int totalPageCount;   // 총 페이지 건수
	private int pageSize;   // 페이지 리스트에서 보여줄 페이지 갯수
	
	
	 // --내부에서 계산 (getter) 왜? 사용자로부터 받는게 없기 때
	private int startRow ;        // 시작 레크드 번호   
	private int endRow;          // 마지막 레크드 번호 
	private int totalRowCount ;   // 총 레코드 건수
	
	
	private int startPage;  // 페이지 리스트에서 시작  페이지 번호 
	private int endPage;   // 페이지 리스트에서 마지막 페이지 번호

 

	/*
	 * 입력 받은 변수를 기반으로
	 * 페이징 관련 변수 계산 
	 */
	public void setting() {
		if(rowSizePerPage < 1) rowSizePerPage = 10;
		if(curPage < 1) curPage = 1;
		if(pageSize < 1) pageSize = 10;
		 
		 //totalPageCount = (int)Math.ceil(totalRowCount /rowSizePerPage); //현재 33이 되야 함
		 totalPageCount = (totalRowCount - 1) / rowSizePerPage + 1; //현재 33이 되야 함
		 System.out.println("totalPageCount = " +totalPageCount);
		 startRow = (curPage -1) * rowSizePerPage + 1;
		 //curPage * rowSizePerPage
		 endRow = startRow + rowSizePerPage - 1 ; // curPage + rowSizePerPage
		 System.out.println("curPage = " +curPage);
		 System.out.println("pageSize = " +pageSize);
		 
		 startPage = (curPage -1) /pageSize * pageSize + 1; //11
		 endPage = startPage + pageSize - 1 ; //15
		 if(endPage > totalPageCount) endPage = totalPageCount;
		 
    }

<페이징 계산을 적은 것>

 

 

 

<JSP 화면 번호 출력>

 

 <div class='pull-right'>
          <ul class="pagination">
 
            <c:if test="${pageMaker.prev}">
              <li class="paginate_button previous"><a href="#">Previous</a>
              </li>
            </c:if>
 
            <c:forEach var="num" begin="${pageMaker.startPage}"
              end="${pageMaker.endPage}">
              <li class="paginate_button"><a href="#">${num}</a></li>
            </c:forEach>
 
            <c:if test="${pageMaker.next}">
              <li class="paginate_button next"><a href="#">Next</a></li>
            </c:if>
          </ul>
        </div>
        <!--  end Pagination -->
      </div>

 

<수정/삭제 후 이동>

 

 @PostMapping("/remove")
  public String remove(@RequestParam("bno") Long bno, @ModelAttribute("cri") Criteria cri, RedirectAttributes rttr) {
 
    log.info("remove..." + bno);
    if (service.remove(bno)) {
      rttr.addFlashAttribute("result", "success");
    }
    rttr.addAttribute("pageNum", cri.getPageNum());
    rttr.addAttribute("amount", cri.getAmount());
 
    return "redirect:/board/list";
  }

 

 

 

제목 클릭 후 상세보기 그리고 수정페이지