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 |