SSH2實現數據庫和界面的分頁

分頁應該是在我們開發web應用時經常要做的工作,能夠比較簡潔的實現數據庫和視圖層的分頁十分重要。在數據庫層利用Hibernate進行數據庫的分頁,將從數據庫中查詢出的數據封裝爲javabean;在視圖層就可以方便的實現分頁。

創建PageBean

  1. package com.fishing.common.bean;  

  2. import java.util.List;  

  3. @SuppressWarnings("unchecked")  

  4. publicclass PageBean {  

  5. private List list; // 要返回的某一頁的記錄列表

  6. privateint allRow; // 總記錄數

  7. privateint totalPage; // 總頁數

  8. privateint currentPage; // 當前頁

  9. privateint pageSize; // 每頁記錄數

  10. privateboolean isFirstPage; // 是否爲第一頁

  11. privateboolean isLastPage; // 是否爲最後一頁

  12. privateboolean hasPreviousPage; // 是否有前一頁

  13. privateboolean hasNextPage; // 是否有下一頁

  14. public List getList() {  

  15. return list;  

  16.    }  

  17. publicvoid setList(List list) {  

  18. this.list = list;  

  19.    }  

  20. publicint getAllRow() {  

  21. return allRow;  

  22.    }  

  23. publicvoid setAllRow(int allRow) {  

  24. this.allRow = allRow;  

  25.    }  

  26. publicint getTotalPage() {  

  27. return totalPage;  

  28.    }  

  29. publicvoid setTotalPage(int totalPage) {  

  30. this.totalPage = totalPage;  

  31.    }  

  32. publicint getCurrentPage() {  

  33. return currentPage;  

  34.    }  

  35. publicvoid setCurrentPage(int currentPage) {  

  36. this.currentPage = currentPage;  

  37.    }  

  38. publicint getPageSize() {  

  39. return pageSize;  

  40.    }  

  41. publicvoid setPageSize(int pageSize) {  

  42. this.pageSize = pageSize;  

  43.    }  

  44. /** */

  45. /**

  46.     * 初始化分頁信息

  47.     */

  48. publicvoid init() {  

  49. this.isFirstPage = isFirstPage();  

  50. this.isLastPage = isLastPage();  

  51. this.hasPreviousPage = isHasPreviousPage();  

  52. this.hasNextPage = isHasNextPage();  

  53.    }  

  54. /** */

  55. /**

  56.     * 以下判斷頁的信息,只需getter方法(is方法)即可

  57.     *  

  58.     * @return

  59.     */

  60. publicboolean isFirstPage() {      

  61. return (currentPage == 1);// 如是當前頁是第1頁    

  62.    }    

  63. publicboolean isLastPage() {      

  64. return currentPage == totalPage; //如果當前頁是最後一頁    

  65. }    

  66. publicboolean isHasPreviousPage() {      

  67. return currentPage != 1; //只要當前頁不是第1頁    

  68. }    

  69. publicboolean isHasNextPage() {      

  70. return currentPage != totalPage; //只要當前頁不是最後1頁    

  71. }    

  72. /** */

  73. /**

  74.     * 計算總頁數,靜態方法,供外部直接通過類名調用

  75.     *  

  76.     * @param pageSize

  77.     *            每頁記錄數

  78.     * @param allRow

  79.     *            總記錄數

  80.     * @return 總頁數

  81.     */

  82. publicstaticint countTotalPage(finalint pageSize, finalint allRow) {  

  83. int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow  

  84.                / pageSize + 1;  

  85. return totalPage;  

  86.    }  

  87. /** */

  88. /**

  89.     * 計算當前頁開始記錄

  90.     *  

  91.     * @param pageSize

  92.     *            每頁記錄數

  93.     * @param currentPage

  94.     *            當前第幾頁

  95.     * @return 當前頁開始記錄號

  96.     */

  97. publicstaticint countOffset(finalint pageSize, finalint currentPage) {  

  98. finalint offset = pageSize * (currentPage - 1);  

  99. return offset;  

  100.    }  

  101. /** */

  102. /**

  103.     * 計算當前頁,若爲0或者請求的URL中沒有"?page=",則用1代替

  104.     *  

  105.     * @param page

  106.     *            傳入的參數(可能爲空,即0,則返回1)

  107.     * @return 當前頁

  108.     */

  109. publicstaticint countCurrentPage(int page) {  

  110. finalint curPage = (page == 0 ? 1 : page);  

  111. return curPage;  

  112.    }  

  113. }  

在Dao的抽象接口BaseDao中添加方法

  1. public List queryForPage(final String hql, finalint offset,  

  2. finalint length);

在Dao的實現類JianSheDWDaoImpl中實現方法

  1. public List queryForPage(final String hql, finalint offset,  

  2. finalint length) {  

  3.        List list = getHibernateTemplate().executeFind(new HibernateCallback() {  

  4. public Object doInHibernate(Session session)  

  5. throws HibernateException, SQLException {  

  6.                Query query = session.createQuery(hql);  

  7.                query.setFirstResult(offset);  

  8.                query.setMaxResults(length);  

  9.                List list = query.list();  

  10. return list;  

  11.            }  

  12.        });  

  13. return list;  

  14.    }

在service抽象層接口JianSheDWService中添加方法

  1. public PageBean queryForPage(int pageSize,int currentPage);  

在service實現類中實現方法

  1. public PageBean queryForPage(int pageSize, int page) {  

  2. final String hql = "from JianSheDWBean"; // 查詢語句

  3. int allRow = this.baseDao.getAllRowCount(hql); // 總記錄數

  4. int totalPage = PageBean.countTotalPage(pageSize, allRow); // 總頁數

  5. finalint offset = PageBean.countOffset(pageSize, page); // 當前頁開始記錄

  6. finalint length = pageSize; // 每頁記錄數

  7. finalint currentPage = PageBean.countCurrentPage(page);  

  8.        List<JianSheDWBean> list = this.baseDao.queryForPage(hql, offset, length); // "一頁"的記錄

  9. // 把分頁信息保存到Bean中

  10.        PageBean pageBean = new PageBean();  

  11.        pageBean.setPageSize(pageSize);  

  12.        pageBean.setCurrentPage(currentPage);  

  13.        pageBean.setAllRow(allRow);  

  14.        pageBean.setTotalPage(totalPage);  

  15.        pageBean.setList(list);  

  16.        pageBean.init();  

  17. return pageBean;  

  18.    }

在視圖層action中建立分頁模型

  1. package com.fishing.action.lcq;  

  2. import com.fishing.common.bean.JianSheDWBean;  

  3. import com.fishing.common.bean.PageBean;  

  4. import com.fishing.service.lcq.JianSheDWService;  

  5. import com.opensymphony.xwork2.ActionSupport;  

  6. @SuppressWarnings("serial")  

  7. publicclass GetInfoJSDWListAction extends ActionSupport {  

  8. privateint page; // 第幾頁

  9. private PageBean pageBean; // 包含分佈信息的bean

  10. private JianSheDWBean jianSheDWBean;  

  11. // private PageBean page;

  12. private JianSheDWService jianSheDWService;  

  13. publicint getPage() {  

  14. return page;  

  15.    }  

  16. publicvoid setPage(int page) {  

  17. this.page = page;  

  18.    }  

  19. public PageBean getPageBean() {  

  20. return pageBean;  

  21.    }  

  22. publicvoid setPageBean(PageBean pageBean) {  

  23. this.pageBean = pageBean;  

  24.    }  

  25. public JianSheDWBean getJianSheDWBean() {  

  26. return jianSheDWBean;  

  27.    }  

  28. publicvoid setJianSheDWBean(JianSheDWBean jianSheDWBean) {  

  29. this.jianSheDWBean = jianSheDWBean;  

  30.    }  

  31. public JianSheDWService getJianSheDWService() {  

  32. return jianSheDWService;  

  33.    }  

  34. publicvoid setJianSheDWService(JianSheDWService jianSheDWService) {  

  35. this.jianSheDWService = jianSheDWService;  

  36.    }  

  37. @Override

  38. public String execute() throws Exception {      

  39. //分頁的pageBean,參數pageSize表示每頁顯示記錄數,page爲當前頁    

  40. this.pageBean = jianSheDWService.queryForPage(10, page);      

  41. return SUCCESS;  

  42.    }  

  43. }  

上面只是代碼的實現,沒有說明配置文件的配置,讀者根據情況配置。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章