• 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. }

    在jsp中编写分页

    1. <trclass="odd">
    2. <td>
    3. &nbsp;
    4. </td>
    5. <td>
    6. <s:iftest="%{pageBean.currentPage == 1}">
    7. 首页 上一页
    8. </s:if>
    9. <s:else>
    10. <ahref="jianguan/getJSDWInfos.action?page=1">首页</a>
    11. <a
    12. href="jianguan/getJSDWInfos.action?page=<s:property value="%{pageBean.currentPage-1}"/>" />上一页</a>
    13. </s:else>
    14. </td>
    15. <td>
    16. <s:iftest="%{pageBean.currentPage != pageBean.totalPage}">
    17. <a
    18. href="jianguan/getJSDWInfos.action?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页</a>
    19. <a
    20. href="jianguan/getJSDWInfos.action?page=<s:property value="pageBean.totalPage"/>">尾页
    21. </a>
    22. </s:if>
    23. <s:else>
    24. 下一页 尾页
    25. </s:else>
    26. </td>
    27. <td>
    28. <divalign="center">
    29. 页次
    30. <s:propertyvalue="pageBean.currentPage"/>
    31. /
    32. <s:propertyvalue="pageBean.totalPage"/>
    33. &nbsp;&nbsp;&nbsp;共
    34. <s:propertyvalue="pageBean.allRow"/>
    35. 记录
    36. </div>
    37. <divalign="center"></div>
    38. </td>
    39. </tr>

    上面只是代码的实现,没有说明配置文件的配置,读者根据情况配置。

  • 相关阅读:
    解决Android Studio Gradle DSL method not found: 'android()'
    【转】关于ListView中notifyDataSetChanged()刷新数据不更新原因
    设计模式-单例模式
    IE浏览器让DIV居中
    Java通过DOM解析XML
    git 配置文件位置;git配置文件设置
    git config配置
    dos2unix
    文件的编码问题解决
    git diff old mode 100644 new mode 100755
  • 原文地址:https://www.cnblogs.com/123a/p/2474023.html
Copyright © 2020-2023  润新知