1. PageInfo vo클래스 생성 

public class PageInfo {
	
	private int listCount;   //게시글 갯수
	private int currentPage; // 사용자가 요청한 페이지
	private int pageLimit;   //페이징바의 페이지목록 최대 갯수
	private int boardLimit;  //페이지에 보여질 게시글 최대 갯수
	
	private int maxPage;     //가장 마지막 페이지수 (listCount, boardLimit가지고 구함)
	private int startPage;   // 해당 페이지 하단에 페이징바의 시작 수 (pageLimit, currentPage가지고 구함) 
	private int endPage;     //해당 페이지 하단에 페이징바의 끝수(startPage, pageLimit, maxPage가지고 구함) 

	public PageInfo() {}
    
    //매개변수생성자와 getter, setter 메소드 , toString메소드도생성

2. controller측에서 listCount/ currentPage/ pageLimit/ boarLimit 전달한 후 반환받은 값  Service측으로 전달 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//----- 페이징처리 ----
		int listCount = new BoardServiceImpl().selectListCount();
		int currentPage = Integer.parseInt(request.getParameter("cpage"));

		//공통모듈로 정의해놓고 호출해서 쓰기 (Pagination)
		PageInfo pi = Pagination.getPageInfo(listCount, currentPage,10, 5);
		ArrayList<Board> list = new BoardServiceImpl().selectList(pi);
		
		request.setAttribute("pi", pi);
		request.setAttribute("list", list);
		
		request.getRequestDispatcher("WEB-INF/views/board/boardListView.jsp").forward(request, response);

	}

 

3. 공통모듈로 정의 후 호출해서 쓰기( Pagination)

 게시글 총갯수, 사용자가 요청한 페이지 수 , pageLimit, boardLimit을 가지고 
마지막 페이지수, 페이징바의 시작수, 페이징바 끝 수 구해서 PageInfo객체 담아 반환

public class Pagination{
	Public static PageInfo getPageInfo(int listCount, int currentPage, int pageLimit, int boardLimit){
        int maxPage = (int)Math.ceil((double)listCount/boardLimit);
        int startPage = (currentPage-1) / pageLimit * pageLimit + 1;
        int endPage = startPage + pageLimit -1;
        if(endPage>maxPage){
            endPage = maxPage;
           }

         return new PageInfo(listCount,currentPage,pageLimit,boardLimit,maxPage,startPage,endPage);

	}
}

  

4. Service  > Dao로 페이지 객체 전달

 **Mybatis에서 제공하는 RowBounds 클래스로 페이징처리

 RowBounds 객체 생성시 "몇개의 게시글을 건너뛰고" "몇개"의 게시글을 조회할 것인지 제시 

offset : 몇개의 게시글을 건너 뛸 것인지에 대한 값 
limit : 몇개의 게시글을 조회할 것인지 (boardLimit과 동일)

public ArrayList<Board> selectList(SqlSession sqlSession, PageInfo pi){
		int offset = (pi.getCurrentPage() -1) * pi.getBoardLimit();
		int limit = pi.getBoardLimit();
		
		RowBounds rowBounds = new RowBounds(offset, limit);
		
		return (ArrayList)sqlSession.selectList("boardMapper.selectList",null,rowBounds);
		// selectList 가list타입으로 반환하기 때문에 ArrayList로 강제형변환 
		
	}

 

5. view 측  

 <div id="paging-area">
            <c:if test="${pi.currentPage ne 1 }"> <!-- 내가 보고있는 페이지가 1이 아닐경우 -->
         	   <a href="list.bo?cpage=${pi.currentPage - 1}">[이전]</a>
         	</c:if>   
         	
         	<c:forEach var="p" begin="${pi.startPage}" end="${pi.endPage}">
          		<a href="list.bo?cpage=${p}">[${p}]</a>
            </c:forEach>
            
            
            <c:if test="${pi.currentPage ne pi.maxPage }"><!-- 내가 보고있는 페이지가 마지막페이지가 아닐경우 -->
           		 <a href="list.bo?cpage=${pi.currentPage + 1}">[다음]</a>
            </c:if>
</div>

 

'Framework > Mybatis' 카테고리의 다른 글

03. mybatis filter 클래스  (0) 2023.02.15
02. mybatis를 이용한 CRUD  (0) 2023.02.14
01. MyBatis 개요 및 세팅  (0) 2023.02.13
복사했습니다!