【菜鳥學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>
小結一下:
其實在之前做的專案中根本沒有想到過使用類去對分頁進行封裝,在遇到分頁的功能需求時,總是想著底層分頁方法的編寫和客戶端分頁如何實現,亦或是藉助前端分頁控制元件實現,將物件導向的程式設計思想跑到了九霄雲外,可能是對物件導向的理解還不夠深刻,因此根本沒有那個想法,不怕不知道,就怕不知道,就是這個道理。
相關文章
- 菜鳥學Java(十)——分頁查詢Java
- 【菜鳥學Java】14:使用ThreadLocal對Connection進行封裝Javathread封裝
- Mybatis封裝分頁查詢的java公用類MyBatis封裝Java
- 【菜鳥學Java】5:“徒手”建立一個Web應用JavaWeb
- 菜鳥學Java(十四)——Java反射機制(一)Java反射
- 菜鳥學Java(十七)——Jboss瘦身Java
- 菜鳥學Java(十八)——異常Java
- 菜鳥問題:請問jsp分頁和資料庫分頁哪個好啊?JS資料庫
- 一個菜鳥管理的學習和思考(一)
- java內部類解析——菜鳥摘記Java
- 菜鳥初學Java的備忘錄(一) (轉)Java
- 菜鳥學Java(十六)——Jboss簡介Java
- 菜鳥學Java(十一)——GET與POSTJava
- 【菜鳥學Java】11:Session技術JavaSession
- 【菜鳥學Java】10:Cookie技術JavaCookie
- 【菜鳥學Java】4:Servlet 技術JavaServlet
- 一個菜鳥管理的學習和思考(二)
- 菜鳥學Java(十五)——Java反射機制(二)Java反射
- 菜鳥學Java(九)——Servlet的基本配置JavaServlet
- java菜鳥入門Java
- 菜鳥學Java(四)——JSP內建物件JavaJS物件
- 菜鳥學Java(二十三)——Java記憶體分析Java記憶體
- 一個菜鳥對密碼學的理解 (4千字)密碼學
- 【菜鳥學Java】7:JSP的基本語法JavaJS
- 【菜鳥學Java】2:初識J2EEJava
- 菜鳥初學Java的備忘錄(二) (轉)Java
- 菜鳥初學Java的備忘錄(五) (轉)Java
- 菜鳥初學Java的備忘錄(八) (轉)Java
- 菜鳥初學Java的備忘錄(七) (轉)Java
- 菜鳥初學Java的備忘錄(九) (轉)Java
- 菜鳥初學Java的備忘錄(四) (轉)Java
- 菜鳥初學Java的備忘錄(六) (轉)Java
- 菜鳥初學Java的備忘錄(十) (轉)Java
- 菜鳥初學Java的備忘錄(三) (轉)Java
- IT菜鳥的學習生活
- 菜鳥學Java(六)——簡單驗證碼生成(Java版)Java
- Linux“菜鳥”到“菜鳥的一些建議Linux
- Android菜鳥學習js筆記一AndroidJS筆記