【菜鳥學Java】3:封裝一個分頁類PageBean

連江偉發表於2015-11-08

        背景介紹:

        在做網上商城的專案時,有一個非常高頻的功能需求,那就是做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>

        小結一下:

        其實在之前做的專案中根本沒有想到過使用類去對分頁進行封裝,在遇到分頁的功能需求時,總是想著底層分頁方法的編寫和客戶端分頁如何實現,亦或是藉助前端分頁控制元件實現,將物件導向的程式設計思想跑到了九霄雲外,可能是對物件導向的理解還不夠深刻,因此根本沒有那個想法,不怕不知道,就怕不知道,就是這個道理。

相關文章