分页
要实现分页,必须知道某一页的数据从哪里开始到哪里结束
假设每页显示10条数据,则
第n页 开始 结束
n (n-1)※10+1 n※10
结论:
第n页的数:第(n-1)※10+1条——第n※10条
MySQL实现分页的sql语句
limit 开始,多少条
例如:
第0页
select ※ from student limit 0,10
第1页
select ※ from student limit 10,10
第n页
select ※ from student limit n ※ 10,10
即:select ※ from student limit 页数 ※ 页面大小,10
页面大小:每一页显示的数据条数
分页实现
- 5个变量
1、数据总数 (查数据库,select count (※ )…)
2、页面大小 (用户自定义)
3、总页数 (程序自动计算)
4、当前页(页码) (用户自定义)
5、当前页的对象集合(实体类的对象集合):每页所显示的所有数据
(查数据库,分页sql语句)
分页显示的前提下:显示数据jsp需要哪些数据
- 当前页 currentPage
- 页面大小 pageSize
- 当前页的数据集合 实体类名(例如:Students)
- 总数据 totalCount
- 总页数 totalPage
注意!!!新建Page类,用于封装以上5个字段
例子如下:
/**
* 分页工具类
* @author Administrator
*
*/
public class PageUtil {
/**
* 生成分页代码
* @param targetUrl 目标地址
* @param totalNum 总记录数
* @param currentPage 当前页
* @param pageSize 每页大小
* @return
*/
public static String genPagination(String targetUrl,long totalNum,int currentPage,int pageSize,String param){
long totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;
if(totalPage==0){
return "未查询到数据";
}else{
StringBuffer pageCode=new StringBuffer();
if (currentPage==1) {
pageCode.append("<li class=disabled><a>首页</a></li>");
} else {
pageCode.append("<li><a href='"+targetUrl+"?page=1&"+param+"'>首页</a></li>");
}
if(currentPage==1){
pageCode.append("<li class=disabled><a>上一页</a></li>");
}else {
pageCode.append("<li><a href='"+targetUrl+"?page="+(currentPage-1)+"&"+param+"'>上一页</a></li>");
}
for(int i=currentPage-2;i<=currentPage+2;i++){
if(i<1||i>totalPage){
continue;
}
if(i==currentPage){
pageCode.append("<li class=active><a>"+i+"</a></li>");
}else{
pageCode.append("<li><a href='"+targetUrl+"?page="+i+"&"+param+"'>"+i+"</a></li>");
}
}
if(currentPage==totalPage){
pageCode.append("<li class=disabled><a>下一页</a></li>");
}else {
pageCode.append("<li><a href='"+targetUrl+"?page="+(currentPage+1)+"&"+param+"'>下一页</a></li>");
}
if (currentPage==totalPage) {
pageCode.append("<li class=disabled><a>尾页</a></li>");
} else {
pageCode.append("<li><a href='"+targetUrl+"?page="+totalPage+"&"+param+"'>尾页</a></li>");
}
return pageCode.toString();
}
}
public static String genPaginationNoParam(String targetUrl,long totalNum,int currentPage,int pageSize){
long totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;
if(totalPage==0){
return "未查询到数据";
}else{
StringBuffer pageCode=new StringBuffer();
pageCode.append("<li><a href='"+targetUrl+"?page=1'>首页</a></li>");
if(currentPage>1){
pageCode.append("<li><a href='"+targetUrl+"?page="+(currentPage-1)+"'>上一页</a></li>");
}
for(int i=currentPage-2;i<=currentPage+2;i++){
if(i<1||i>totalPage){
continue;
}
if(i==currentPage){
pageCode.append("<li>"+i+"</li>");
}else{
pageCode.append("<li><a href='"+targetUrl+"?page="+i+"'>"+i+"</a></li>");
}
}
if(currentPage<totalPage){
pageCode.append("<li><a href='"+targetUrl+"?page="+(currentPage+1)+"'>下一页</a></li>");
}
pageCode.append("<li><a href='"+targetUrl+"?page="+totalPage+"'>尾页</a></li>");
return pageCode.toString();
}
}
}