上一节实现了日记列表的显示这个功能,这一节来实现以下分页查询的功能;
目录
2.web层,在MainServlet中写PageBean组件;
1.dao层,获取总记录数方法;
我们在userDao类里面写一个获取当前日志的总记录数的方法;
//计算日志的总记录数
public int diaryCount(Connection con)throws Exception{
StringBuffer sb=new StringBuffer("select count(*) as total from t_diary t1,t_diarytype t2 where t1.typeId=t2.diaryTypeId ");
PreparedStatement pstmt=con.prepareStatement(sb.toString());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
return rs.getInt("total");
}else{
return 0;
}
}
2.web层,在MainServlet中写PageBean组件;
我们在前台点击上一页,下一页或者第几页的时候,会给后台传一个当前页page的数据,所以后台我们需要获取一下page;
若是page为空,则设置为1;
另外再写一个PageBean的组件,让diaryList查询出来的结果不仅有所有数据,最后还以分页的形式展现出来;
package com.java.model;
public class PageBean {
private int page; // 第几页,即当前页
private int pageSize; // 每页记录数
@SuppressWarnings("unused")
private int start; // 起始页
public PageBean(int page, int pageSize) {
super();
this.page = page;
this.pageSize = pageSize;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
//计算起始页的方法
public int getStart() {
return (page-1)*pageSize;
}
}
3.dao层,查询数据时采用分页查询
我们在dao层里面的diaryList方法里添加一个pageBean的参数,附加分页查询;
另外再MainServlet里面要进行相应的修改;
其中,PageBean的构造方法有两个参数,一个是当前页page,就是我们从前台获取的数据,
另一个是每页的记录数,我们可以在properties文件里面设置pageSize的大小;
4.web层,写前台展示分页的方法;
在MianServlet里面写展示分页的功能,这里面的逻辑我们放在后台实现,用StringBuffer来进行拼接;
而且要获取分页的功能实现,写一个获取pageCode的方法,参数分别是日志的总记录数,当前页和每页的数据量大小;
//获取分页pageCode的方法,参数分别是总记录数,当前页和每页的数据量大小
private String genPagation(int totalNum,int currentPage,int pageSize){
//获取总页数,要注意逻辑问题
int totalPage=(totalNum%pageSize==0)?(totalNum/pageSize):(totalNum/pageSize+1);
//对pageCode进行操作
StringBuffer pageCode=new StringBuffer();
//首页
pageCode.append("<li><a href='main?page=1'>首页</a></li>");
//如果当前页为1,则上一页就为禁用状态
if(currentPage==1){
pageCode.append("<li class='disabled'><a href='#'>上一页</a></li>");
}else{
pageCode.append("<li><a href='main?page="+(currentPage-1)+"'>上一页</a></li>");
}
//对中间的所有页数进行遍历输出,总共5个数据显示
for(int i=currentPage-1;i<=currentPage+1;i++){
//如果i小于1或者大于总页数,则跳过继续
if(i<1||i>totalPage){
continue;
}
//如果i刚好等于当前页
if(i==currentPage){
pageCode.append("<li class='active'><a href='#'>"+i+"</a></li>");
}else{
//active表示当前页
pageCode.append("<li><a href='main?page="+i+"'>"+i+"</a></li>");
}
}
//如果当前页为总页数了,则下一页就为禁用状态
if(currentPage==totalPage){
pageCode.append("<li class='disabled'><a href='#'>下一页</a></li>");
}else{
pageCode.append("<li><a href='main?page="+(currentPage+1)+"'>下一页</a></li>");
}
//尾页
pageCode.append("<li><a href='main?page="+totalPage+"'>尾页</a></li>");
//返回一个前台需要的pageCode
return pageCode.toString();
}
然后在MainServlet里面的doPost()方法里面调用就行了;
最后测试;