Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说JavaWeb+MySql分页封装,希望能够帮助你!!!。
前段时间因为需要所以写一个JavaWeb+MySql的分页封装类,附上代码。技术有限写得不好请多多指教。
1.首先贴上Eneity类
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。注意一下这里只是部分代码,相信贴出这段代码你就知道如何做
@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>
最后这里贴上效果图:
图1
图2
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。