【菜鸟学Java】3:封装一个分页类PageBean

        背景介绍:

        在做网上商城的项目时,有一个非常高频的功能需求,那就是做Web前端开发都知道的分页显示数据。当然要实现这个功能方法是非常多的,在我之前的做的项目接口管理系统中,使用的实现方式是假分页的方式,即将所有的数据查询出来,在前端进行分页,这个分页是使用前端框架的表格控件来完成的。因此我们在开发的时候,并没有在分页的实现上下多大的功夫,当然也就谈不上什么抽象和封装之类的编程技巧了。

        当然,真分页的方式也实现过,就是在底层封装一些分页查询的方法,将分页信息比如起始页以及每页显示多少条记录等参数信息传入,然后在方法内部使用原生的SQL和传入的参数一起组成SQL语句,执行SQL语句来实现分页。显然这也没有使用面向对象的思想来实现分页功能。

        那么如何用面向对象的方式来实现分页的功能呢?请往下看:

        正文部分:

        首先我们先来封装一个分页实体类PageBean,代码如下:

        分页类PageBean

        

<span style="font-size:18px;">public class PageBean<T> {
	private int page; //当前页数
	private int totalCount;  //总记录数
	private int totalPage;  //总页数
	private int limit;   //每页显示的记录数
	private List<T> list; //每页显示数据记录的集合;
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public int getLimit() {
		return limit;
	}
	public void setLimit(int limit) {
		this.limit = limit;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}
	
}</span>

        那么如何使用封装好的分页类呢?接着往下看:

        Action类业务方法

        

<span style="font-size:18px;">//根据分类的ID查询商品
	public String findByCid(){
		
		PageBean<Product> pageBean=productService.findByPageCid(cid,page);//根据一级分类查询带分页的商品
		//将PageBean存入到值栈中
		ActionContext.getContext().getValueStack().set("pageBean", pageBean);
		return "findByCid";
	}</span>

        Service类业务方法

        

<span style="font-size:18px;">//根据一级分类的cid带分页的查询商品
	public PageBean<Product> findByPageCid(Integer cid, int page) {
		PageBean<Product> pageBean= new PageBean<Product>();
		//设置当前页数
		pageBean.setPage(page);
		//设置每页显示的记录数
		int limit =8;
		pageBean.setLimit(limit);
		//设置总记录数
		int totalCount=0;
		totalCount = productDao.findCountCid(cid);
		pageBean.setTotalCount(totalCount);
		//设置总页数
		int totalPage=0;
		if(totalCount % limit ==0){
			totalPage=totalCount/limit;
			
		}else {
			totalPage= totalCount/limit +1;
		}
		pageBean.setTotalPage(totalPage);
		//每页显示的数据集合
		//从哪开始
		int begin=(page-1)*limit;
		List<Product> list=productDao.findByPageCid(cid,begin,limit);
		pageBean.setList(list);
		return pageBean;
	}</span>

        Dao类业务方法

        

<span style="font-size:18px;">public List<Product> findByPageCid(Integer cid, int begin, int limit) {
		String hql="select p from Product p join p.categorySecond cs join cs.category c where c.cid=?";
		//分页的另一种方法
		List<Product> list=this.getHibernateTemplate().execute(new PageHibernateCallback<Product>(hql, new Object[]{cid}, begin, limit));
		if(list!=null && list.size()>0){
			return list;
		}
		return null;
	}</span>

        小结一下:

        其实在之前做的项目中根本没有想到过使用类去对分页进行封装,在遇到分页的功能需求时,总是想着底层分页方法的编写和客户端分页如何实现,亦或是借助前端分页控件实现,将面向对象的编程思想跑到了九霄云外,可能是对面向对象的理解还不够深刻,因此根本没有那个想法,不怕不知道,就怕不知道,就是这个道理。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值