前段时间因为需要所以写一个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