java專案中常用的分頁物件Page
阿新 • • 發佈:2019-01-25
在使用JAVA平臺開發企業級應用時,常常會遇到分頁的場景,而且每一個專案都有自己的分頁方法。現在給出我自己總結的比較通用的分頁物件,以供有需之人蔘考。
package cn.cgs.corejava.model.persistent; import java.io.Serializable; import java.util.List; /** * 與前端互動的分頁資料物件 * * @author 陳淦森 * @param <E> * @version 1.0.1 * @Date 2016年1月4日 */ public class Page<E> implements Serializable { /** * */ private static final long serialVersionUID = -4973539948210269342L; /** * 預設頁碼 */ public static final int DEFAULT_PAGE_NO = 1; /** * 預設頁面大小 */ public static final int DEFAULT_PAGE_SIZE = 10; /** * 預設的快速導航頁碼顯示個數 */ public static final int DEFAULT_PAGE_NAV_SIZE = 5; private int pageNo = DEFAULT_PAGE_NO; // 頁碼 private int pageSize = DEFAULT_PAGE_SIZE; // 頁面大小 private int pageNaviSize = DEFAULT_PAGE_NAV_SIZE; // 頁碼快速導航顯示的個數 private int totalCount; // 總的記錄數 private List<E> resultList; // 返回的查詢結果集 public Page() { super(); } public Page(int pageNo, int pageSize) { super(); setPageNo(pageNo); setPageSize(pageSize); } public Page(int pageNo, int pageSize, int pageNaviSize) { this(pageNo, pageSize); setPageNaviSize(pageNaviSize); } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { if (pageNo < 1) { pageNo = DEFAULT_PAGE_NO; } this.pageNo = pageNo; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { if (pageSize < 1) { pageSize = DEFAULT_PAGE_SIZE; } this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public List<E> getResultList() { return resultList; } public void setResultList(List<E> resultList) { this.resultList = resultList; } public int getPageNaviSize() { return pageNaviSize; } /** * 返回快速導航頁碼 * * @return */ public int[] getPageNavis() { // 先運算出左,右邊界 int start = 0, end = 0; int a = pageNaviSize / 2; start = pageNo - a; if (pageNaviSize % 2 == 0) { end = pageNo + a - 1; } else { end = pageNo + a; } // 分三種情況處理 int totalPages = getTotalPage(); int[] b = new int[pageNaviSize]; // 左邊界 if (start < 1) { for (int i = 0, step = 1; i < pageNaviSize; i++, step++) { if (step <= totalPages) { b[i] = step; } else { break; } } } else if (end > totalPages) { // 右邊界 for (int i = pageNaviSize - 1, step = totalPages; i >= 0; i--, step--) { if (step > 0) { b[i] = step; } else { break; } } } else { // 中間 for (int i = 0; i < pageNaviSize; i++) { b[i] = start++; } } return b; } public void setPageNaviSize(int pageNaviSize) { if (pageNaviSize < 1) { pageNaviSize = DEFAULT_PAGE_NAV_SIZE; } this.pageNaviSize = pageNaviSize; } /** * 獲得總的頁碼數量 * * @return */ public int getTotalPage() { if (totalCount % pageSize > 0) { return totalCount / pageSize + 1; } else { return totalCount / pageSize; } } /** * 獲取從哪一條記錄開始查詢 * * @return */ public int getFirstIndex() { return (pageNo - 1) * pageSize; } /** * 獲取最後一條記錄的下標數(不包含) * * @return */ public int getLastIndex() { return getFirstIndex() + pageSize; } /** * 判斷是否還有下一頁 * * @return */ public boolean isHasNextPage() { return (pageNo + 1) <= getTotalPage(); } /** * 獲取下一個頁碼,在呼叫之前先呼叫<code>isHasNextPage()</code>方法進行判斷 * * @return */ public int getNextPage() { return pageNo + 1; } /** * 判斷是否還有上一頁 * * @return */ public boolean isHasPrePage() { return (pageNo - 1) > 0; } /** * 獲取上一個頁碼,在呼叫之前先呼叫<code>isHasPrePage()</code>方法進行判斷 * * @return */ public int getPrePage() { return pageNo - 1; } }