public class PageModel {
//基本属性
private int currentPageNum; //当前页数,由用户指定
private int pageSize = 5; //每页显示的条数,固定的
private int totalRecords; //总记录条数,数据库查出来的
private int totalPageNum; //总页数,计算出来的
private int startIndex; //每页开始记录的索引,计算出来的
private int prePageNum; //上一页
private int nextPageNum; //下一页
private List list;//已经分好页的结果集,该list中只有10条记录
//扩展属性
//一共每页显示9个页码按钮
private int startPage;//开始页码
private int endPage;//结束页码
//完善属性
private String url;
//要想使用我的分页,必须给我两个参数。一个是要看哪一页,另一个是总记录条数
public PageModel(int currentPageNum, int totalRecords, int pageSize) {
this.currentPageNum = currentPageNum;
this.totalRecords = totalRecords;
this.pageSize = pageSize;
//计算查询记录的开始索引
startIndex = (currentPageNum - 1) * pageSize;
//计算总页数
totalPageNum = totalRecords % pageSize == 0 ? (totalRecords / pageSize) : (totalRecords / pageSize + 1);
startPage = currentPageNum - 4;
endPage = currentPageNum + 4;
//看看总页数够不够9页
if (totalPageNum > 9) {
//超过了9页
if (startPage < 1) {
startPage = 1;
endPage = startPage + 8;
}
if (endPage > totalPageNum) {
endPage = totalPageNum;
startPage = endPage - 8;
}
} else {
//不够9页
startPage = 1;
endPage = totalPageNum;
}
}
}
这个分页对象每页显示9个页码,以当前页为中心,向前显示4个,向后显示4个。
currentPageNum
当前页的页码,一般由前端传参获得。
pageSize
每页显示的条数
totalRecords
查询条目的总记录数,一般从数据库中查询count(*)获得
totalPageNum
当前条目查询出的总页数,一般通过公式计算获得。如:总页数对每页条数取余,若取余为0,则总页数 = 总记录数/每页条数;若不为0,总页数 = (总记录数/每页条数)+1。
startIndex
每页开始的记索引,如:每页显示3条。
查询语句查第1页就是select * from table limit 0,3
起始索引就是limit后第一个数,数据库记录下标从0开始,0,3就是从0开始数3条,查询出0,1,2三条记录。
查第2页就是select * from table limit 3,3
3,3就是从0开始数3条,查询出3,4,5三条记录。
起始索引:(当前页 - 1 )* 每页条数
比方第一页就是 1 - 1 * 3 = 0
第二页就是 2 - 1 * 3 = 3
prePageNum nextPageNum
上一页,下一页
list
存放查询出的当前分页结果
startPage endPage
最前页和最末页
这里需要特殊处理
startPage = currentPageNum - 4;
endPage = currentPageNum + 4;
//看看总页数够不够9页
if (totalPageNum > 9) {
//超过了9页
if (startPage < 1) {
startPage = 1;
endPage = startPage + 8;
}
if (endPage > totalPageNum) {
endPage = totalPageNum;
startPage = endPage - 8;
}
} else {
//不够9页
startPage = 1;
endPage = totalPageNum;
}
最前页等于当前页-4
最末页等于当前页+4
如果总页数大于9,说明要特殊处理前页和末页。先处理小页码的问题,比如共有37条记录,每页3条,第13页只有1条记录。访问第2页,2-4等于-2,需要对前页置1,末页等于前页+8.
然后处理大页码的问题,比如还是这个例子,比如访问第11页,11+4=15页超出了末页13,需要将末页置为13,然后前页等于末页-8。
最后是不够9页的情况,前页置1,末页值最大页数。
以上。