前段時間由於須要因此寫一個JavaWeb+MySql的分頁封裝類,附上代碼。技術有限寫得很差請多多指教。javascript
1.首先貼上Eneity類java
package com.zx.pageUtil; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * <b> 分頁工具類 </b> * @author zhangxiang * */ public class Pager implements Serializable { private static final long serialVersionUID = 4542617637761955078L; /** * currentPage 當前頁 */ private int currentPage = 1; /** * pageSize 每頁大小 */ private int pageSize = 5; /** * pageTotal 總頁數 */ private int pageTotal; /** * recordTotal 總條數 */ private int recordTotal = 0; /** * previousPage 前一頁 */ private int previousPage; /** * nextPage 下一頁 */ private int nextPage; /** * firstPage 第一頁 */ private int firstPage = 1; /** * lastPage 最後一頁 */ private int lastPage; /** * 頁號式導航, 起始頁號 */ private int startPage; /** * 頁號式導航, 結束頁號 */ private int endPage; /** * 頁號式導航, 最多顯示頁號數量爲numCount+1;這裏顯示11頁。 */ private int numCount = 10; /** * 要顯示的頁號 */ public List<Integer> showPagesNum = new ArrayList<Integer>(); // 如下set方式是須要賦值的 不須要所有生成set /** * 設置當前頁 <br> * @param currentPage */ public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } /** * 設置每頁大小,也能夠不用賦值,默認大小爲10條 <br> * @param pageSize */ public void setPageSize(int pageSize) { this.pageSize = pageSize; } /** * 設置總條數,默認爲0 <br> * @param recordTotal */ public void setRecordTotal(int recordTotal) { this.recordTotal = recordTotal; otherAttr(); } /** * 設置其餘參數 */ public void otherAttr() { // 總頁數 this.pageTotal = this.recordTotal % this.pageSize > 0 ? this.recordTotal / this.pageSize + 1 : this.recordTotal / this.pageSize; // 第一頁 this.firstPage = 1; // 最後一頁 this.lastPage = this.pageTotal; // 前一頁 if (this.currentPage > 1) { this.previousPage = this.currentPage - 1; } else { this.previousPage = this.firstPage; } // 下一頁 if (this.currentPage < this.lastPage) { this.nextPage = this.currentPage + 1; } else { this.nextPage = this.lastPage; } // 計算page 控制 /** 計算數字翻頁起始數字從哪個開始 ,由於咱們默認的是須要顯示10個翻頁數字(加上本頁等於11頁) startPage是起始翻頁數字,因此須要個根據本頁向前顯示5個翻頁數字 例如本頁是 6 那麼就是 1 2 3 4 5 6(本頁) 同時須要判斷是否是第一頁,第一頁不須要向前顯示翻頁數字。 this.currentPage - numCount / 2 只要本頁不大於6 它的數字翻頁始終從1開始,7就從2開始 8就從3開始 以此類推 */ startPage = Math.max(this.currentPage - numCount / 2, firstPage); endPage = Math.min(startPage + numCount, lastPage); /** 查看全部的數字翻頁是否大於設置的默認數字翻頁個數 若是不大於 那就說明總的頁數小於默認設置要顯示的數字翻頁的個數或者等於 那麼就從第1頁的數字翻頁開始顯示 一直到總的頁數 */ if (endPage - startPage < numCount) { startPage = Math.max(endPage - numCount, 1); } /** 編寫數字翻頁集合利於頁面迭代取出相應的數字翻頁。 */ for(int i = startPage; i <= endPage; i++){ showPagesNum.add(i); } } // 放開私有屬性 public int getCurrentPage() { return currentPage; } public int getPageSize() { return pageSize; } public int getPageTotal() { return pageTotal; } public int getRecordTotal() { return recordTotal; } public int getPreviousPage() { return previousPage; } public int getNextPage() { return nextPage; } public int getFirstPage() { return firstPage; } public int getLastPage() { return lastPage; } public int getStartPage() { return startPage; } public int getEndPage() { return endPage; } public int getNumCount() { return numCount; } public List<Integer> getShowPagesNum() { return showPagesNum; } @Override public String toString() { return "Pager [currentPage=" + currentPage + ", pageSize=" + pageSize + ", pageTotal=" + pageTotal + ", recordTotal=" + recordTotal + ", previousPage=" + previousPage + ", nextPage=" + nextPage + ", firstPage=" + firstPage + ", lastPage=" + lastPage + ", startPage=" + startPage + ", endPage=" + endPage + "]"; } }
2.與數據庫交互代碼,我這邊用的是Spring JDBC。注意一下這裏只是部分代碼,相信貼出這段代碼你就知道如何作sql
@Override public List<User> getUserList(Pager pager) { String sql = "select * from user limit ?,? "; this.getJdbcTemplate().query(sql,new Object[] {(pager.getCurrentPage()*pager.getPageSize()-pager.getPageSize()),pager.getPageSize()}); return null; }
3.jsp代碼選擇翻頁導航代碼,因爲樣式中含有背景圖,因此沒有辦法給到數據庫
<div class="member-pages clearfix"> <div class="fr pc-search-g" > <c:if test="${pager.currentPage >1 }"> <a href="addressView?currentPage=${pager.previousPage }" class="pc-search-n" >上一頁</a> </c:if> <c:forEach items="${pager.showPagesNum}" var="showPages"> <a href="addressView?currentPage=${showPages }" <c:if test="${pager.currentPage == showPages}">class="current"</c:if>>${showPages }</a> </c:forEach> <c:if test="${pager.currentPage < pager.pageTotal }"> <span class="pc-search-di">…</span> <a href="addressView?currentPage=${pager.nextPage }" class="pc-search-n" >下一頁</a> </c:if> <form action="addressView" id="subform" method="post" style="display:inline;"> <span class="pc-search-y"> <em> 共${pager.pageTotal }頁 到第</em> <input type="text" name="currentPage" placeholder="${pager.currentPage }" class="pc-search-j"> <em>頁</em> <a class="confirm" href="javascript:;" onclick="document.getElementById('subform').submit();return false">肯定</a> </span> </form> </div> </div>
最後這裏貼上效果圖:jsp
圖1ide
圖2工具