Diary(三)——日记列表显示以及分页查询的实现(下)

上一节实现了日记列表的显示这个功能,这一节来实现以下分页查询的功能;

目录

1.dao层,获取总记录数方法;

2.web层,在MainServlet中写PageBean组件;

3.dao层,查询数据时采用分页查询 

4.web层,写前台展示分页的方法;


 

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()方法里面调用就行了;

最后测试;

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值