package org.fanhongtao.mybatis.frame; import org.apache.ibatis.session.RowBounds; /** * @author Fan Hongtao * @created 2010-8-27 */ final public class PageHelper { /** total record number */ private int recordNum; /** record number in each page */ private int pageSize; /** Max page, maxPage = recordNum / pageSize */ private int maxPage; /** Current page, start from 1 */ private int currPage; public PageHelper(int pageSize) { this(Integer.MAX_VALUE, pageSize); } public PageHelper(int recordNum, int pageSize) { this.pageSize = pageSize; this.currPage = 1; setRecordNum(recordNum); } public int getRecordNum() { return recordNum; } public void setRecordNum(int recordNum) { this.recordNum = recordNum; if (recordNum % pageSize == 0) { this.maxPage = recordNum / pageSize; } else { this.maxPage = recordNum / pageSize + 1; } setCurrPage(currPage); } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getMaxPage() { return maxPage; } // Do no provide a method to set maxPage // public void setMaxPage(int maxPage) // { // this.maxPage = maxPage; // } public int getCurrPage() { return currPage; } /** * Jump to the specified page<br> * If the new page is less than 1, set it to 1<br> * If the new page is great than maxPage, set it to maxPage<br> * @param currPage new page number */ public void setCurrPage(int currPage) { if (currPage < 1) { this.currPage = 1; } else if (currPage > maxPage) { this.currPage = maxPage; } else { this.currPage = currPage; } } public int nextPage() { if (currPage < maxPage) { currPage++; } return currPage; } public int prevPage() { if (currPage > 1) { currPage--; } return currPage; } /** * If current page is the first page * @return true: Yes, it's the first page; false: no, it's not */ public boolean isFirstPage() { return (currPage == 1); } /** * If current page is the last page * @return true: Yes, it's the last page; false: no, it's not */ public boolean isLastPage() { return (currPage == maxPage); } public RowBounds getRowBounds() { return new RowBounds(currPage * pageSize, pageSize); } }