Java EE之分頁器設計
阿新 • • 發佈:2017-11-11
net ons 下午 概念 div details mit 產生 log
由於數據庫實訓的課程設計,在做項目過程中,需要使項目更加規範的結構和各層間責任分離。無疑地,分頁器是其中之一。
1. 本文僅陳述分頁器如何實現,關於分頁器的其他概念,請自行搜索其他網絡資源。
2. 關於如何在各層使用使用PageBean,見本文引用文獻3
一、設計實現
/** * 分頁器 * @author Zen Johnny * @date 2017年11月11日 下午1:19:32 * @notice sql demo:SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15 */ package com.cpms.entity.vo; import java.util.Collections; import java.util.List; public class Pager<Entity> { /** * 存放當前頁的數據 */ private List<Entity> entitys; /** * 每頁行數(記錄數),默認為10 */ private int pageSize; /** * 默認的每頁記錄數為10(用於缺省構造器,無set方法) */ private static final int DEFAULT_PAGE_SIZE = 10; /** * 總行數(總記錄數) */ private int totalRows; /** * 總頁數 */ private int totalPage; /** * 當前頁數,默認為第一頁 */ private int curPage = 1; /** * 前一頁 */ private int prePage; /** * 後一頁 */ private int nextPage; /** * 數據庫開始的指針 * limit begin,offset 中 的m */ private int beginCursor; /** * 數據庫查詢記錄時候的偏移量 * limit begin,offset 中 的 offset */ private int offsetCursor; /** * constructor */ public Pager() { this(0, DEFAULT_PAGE_SIZE, 0, Collections.EMPTY_LIST); } /** * constructor */ public Pager(int curPage, int pageSize, int totalRows,List<Entity> entitys) { this.entitys = entitys; //↓先得設置總記錄和每個頁面的記錄數,才有辦法知道【總頁數】等屬性 this.totalRows = totalRows; setPageSize(pageSize); //↓註意:1.條件:總記錄數totalRows和每頁記錄數pageSize 2.此處計算非常容易產生精度損失 setTotalPage(); //↓條件:總頁數totalPage setCurPage(curPage); //↓條件:當前頁碼curPage和每頁記錄數pageSize setBeginCursor(); //↓條件:每頁記錄數pageSize setOffsetCursor(); //↓條件:當前頁頁碼curPage setPrePage(); //↓條件:當前頁頁碼curPage和總頁數totalPage setNextPage(); } public List<Entity> getEntitys() { return entitys; } /** * 設置當前頁面數據對象,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setEntitys(List<Entity> entitys) { this.entitys = entitys; } public int getPageSize() { return pageSize; } /** * 設置頁面大小,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setPageSize(int pageSize) { if(pageSize < 1) { pageSize = DEFAULT_PAGE_SIZE; }else { this.pageSize = pageSize; } } public static int getDefaultPageSize() { return DEFAULT_PAGE_SIZE; } public int getTotalRows() { return totalRows; } /** * 設置頁總記錄數,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setTotalRows(int totalRows) { if(totalRows < 1) this.totalRows = 0; else this.totalRows = totalRows; } public int getTotalPage() { return totalPage; } /** * 設置總頁面數,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setTotalPage() { this.totalPage = (int) Math.ceil((double)totalRows/pageSize); } public int getCurPage() { return curPage; } public void setCurPage(int curPage) { if(curPage < 1) this.curPage = 1; else if(curPage > totalPage) this.curPage = totalPage; else this.curPage = curPage; } public int getPrePage() { return prePage; } private void setPrePage() { this.prePage = curPage - 1; if(this.prePage < 1) //註意:this.prePage[當前] this.prePage = 1; } public int getNextPage() { return nextPage; } /** * 設置下一頁頁碼,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setNextPage() { this.nextPage = curPage + 1; if(this.nextPage > totalPage)//註意:this.nextPage[當前] this.nextPage = totalPage; } public int getBeginCursor() { return beginCursor; } /** * 設置數據庫查詢記錄時的起始遊標,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setBeginCursor() { this.beginCursor = (curPage - 1) * pageSize; } public int getOffsetCursor() { return offsetCursor; } /** * 設置數據庫查詢記錄時的遊標偏移量,私有,對外屏蔽,防止破壞分頁器各屬性的一致性 */ private void setOffsetCursor() { this.offsetCursor = pageSize; } /** * 是否還有上一頁 */ public boolean hasPrePage() { if(this.prePage == 1) { return false; } return true; } /** * 是否還有下一頁 */ public boolean hasNextPage() { if(this.nextPage == this.totalPage) { return false; } return true; } @Override public String toString() { return "Pager [entitys=" + entitys + ", pageSize=" + pageSize + ", totalRows=" + totalRows + ", totalPage=" + totalPage + ", curPage=" + curPage + ", prePage=" + prePage + ", nextPage=" + nextPage + ", beginCursor=" + beginCursor + ", offsetCursor=" + offsetCursor + "]"; } }
二、參考文獻
1.[強大的 java 分頁器]http://blog.csdn.net/hcmdy/article/details/25251911
2.[java--分頁查詢接口設計及分頁器的實現]http://blog.csdn.net/u011659172/article/details/18231509
3.[Java Web(十一) 分頁功能的實現]https://www.cnblogs.com/whgk/p/6474396.html
Java EE之分頁器設計