1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法:

  1. public interface PersonDAO
  2. {
  3. public List<Person> queryByPage(String hql, int offset, int pageSize);
  4.  
  5. public int getAllRowCount(String hql);
  6. }

2.DAO层接口的实现类PersonDAOImpl类,将其两个方法实现出来:

  1. public class PersonDAOImpl implements PersonDAO
  2. {
  3. /**
  4. * 通过hql语句得到数据库中记录总数
  5. */
  6. @Override
  7. public int getAllRowCount(String hql)
  8. {
  9. Session session = HibernateUtil.openSession();
  10. Transaction tx = null;
  11. int allRows = ;
  12. try
  13. {
  14. tx = session.beginTransaction();
  15.  
  16. Query query = session.createQuery(hql);
  17.  
  18. allRows = query.list().size();
  19.  
  20. tx.commit();
  21.  
  22. }
  23. catch (Exception e)
  24. {
  25. if(tx != null)
  26. {
  27. tx.rollback();
  28. }
  29.  
  30. e.printStackTrace();
  31. }
  32. finally
  33. {
  34. HibernateUtil.closeSession(session);
  35. }
  36.  
  37. return allRows;
  38. }
  39. /**
  40. * 使用hibernate提供的分页功能,得到分页显示的数据
  41. */
  42. @SuppressWarnings("unchecked")
  43. @Override
  44. public List<Person> queryByPage(String hql, int offset, int pageSize)
  45. {
  46. Session session = HibernateUtil.openSession();
  47. Transaction tx = null;
  48. List<Person> list = null;
  49.  
  50. try
  51. {
  52. tx = session.beginTransaction();
  53.  
  54. Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize);
  55.  
  56. list = query.list();
  57.  
  58. tx.commit();
  59.  
  60. }
  61. catch (Exception e)
  62. {
  63. if(tx != null)
  64. {
  65. tx.rollback();
  66. }
  67.  
  68. e.printStackTrace();
  69. }
  70. finally
  71. {
  72. HibernateUtil.closeSession(session);
  73. }
  74.  
  75. return list;
  76. }
  77. }

3.定义了一个PageBean(每一页所需要的内容都存放在这个PageBean里面),里面用来存放网页每一页显示的内容:

  1. public class PageBean
  2. {
  3. private List<Person> list; //通过hql从数据库分页查询出来的list集合
  4.  
  5. private int allRows; //总记录数
  6.  
  7. private int totalPage; //总页数
  8.  
  9. private int currentPage; //当前页
  10.  
  11. public List<Person> getList()
  12. {
  13. return list;
  14. }
  15.  
  16. public void setList(List<Person> list)
  17. {
  18. this.list = list;
  19. }
  20.  
  21. public int getAllRows()
  22. {
  23. return allRows;
  24. }
  25.  
  26. public void setAllRows(int allRows)
  27. {
  28. this.allRows = allRows;
  29. }
  30.  
  31. public int getTotalPage()
  32. {
  33. return totalPage;
  34. }
  35.  
  36. public void setTotalPage(int totalPage)
  37. {
  38. this.totalPage = totalPage;
  39. }
  40.  
  41. public int getCurrentPage()
  42. {
  43. return currentPage;
  44. }
  45.  
  46. public void setCurrentPage(int currentPage)
  47. {
  48. this.currentPage = currentPage;
  49. }
  50.  
  51. /**
  52. * 得到总页数
  53. * @param pageSize 每页记录数
  54. * @param allRows 总记录数
  55. * @return 总页数
  56. */
  57. public int getTotalPages(int pageSize, int allRows)
  58. {
  59. int totalPage = (allRows % pageSize == )? (allRows / pageSize): (allRows / pageSize) + ;
  60.  
  61. return totalPage;
  62. }
  63.  
  64. /**
  65. * 得到当前开始记录号
  66. * @param pageSize 每页记录数
  67. * @param currentPage 当前页
  68. * @return
  69. */
  70. public int getCurrentPageOffset(int pageSize, int currentPage)
  71. {
  72. int offset = pageSize * (currentPage - );
  73.  
  74. return offset;
  75. }
  76.  
  77. /**
  78. * 得到当前页, 如果为0 则开始第一页,否则为当前页
  79. * @param page
  80. * @return
  81. */
  82. public int getCurPage(int page)
  83. {
  84. int currentPage = (page == )? : page;
  85.  
  86. return currentPage;
  87. }
  88.  
  89. }

4.Service层接口设计,定义一个PersonService接口,里面声明了一个方法,返回一个PageBean:

  1. public interface PersonService
  2. {
  3. public PageBean getPageBean(int pageSize, int page);
  4. }

5.Service层接口实现类PersonServiceImpl类,实现唯一的方法:

  1. public class PersonServiceImpl implements PersonService
  2. {
  3. private PersonDAO personDAO = new PersonDAOImpl();
  4.  
  5. /**
  6. * pageSize为每页显示的记录数
  7. * page为当前显示的网页
  8. */
  9. @Override
  10. public PageBean getPageBean(int pageSize, int page)
  11. {
  12. PageBean pageBean = new PageBean();
  13.  
  14. String hql = "from Person";
  15.  
  16. int allRows = personDAO.getAllRowCount(hql);
  17.  
  18. int totalPage = pageBean.getTotalPages(pageSize, allRows);
  19.  
  20. int currentPage = pageBean.getCurPage(page);
  21.  
  22. int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);
  23.  
  24. List<Person> list = personDAO.queryByPage(hql, offset, pageSize);
  25.  
  26. pageBean.setList(list);
  27. pageBean.setAllRows(allRows);
  28. pageBean.setCurrentPage(currentPage);
  29. pageBean.setTotalPage(totalPage);
  30.  
  31. return pageBean;
  32. }
  33. }

6.Action层设计,定义一个PersonAction:

  1. public class PersonAction extends ActionSupport
  2. {
  3. private PersonService personService = new PersonServiceImpl();
  4.  
  5. private int page;
  6.  
  7. public int getPage()
  8. {
  9. return page;
  10. }
  11.  
  12. public void setPage(int page)
  13. {
  14. this.page = page;
  15. }
  16.  
  17. @Override
  18. public String execute() throws Exception
  19. {
  20. //表示每页显示5条记录,page表示当前网页
  21. PageBean pageBean = personService.getPageBean(, page);
  22.  
  23. HttpServletRequest request = ServletActionContext.getRequest();
  24.  
  25. request.setAttribute("pageBean", pageBean);
  26.  
  27. return SUCCESS;
  28. }
  29. }

7.辅助类设计,HibernateUtil:

  1. public class HibernateUtil
  2. {
  3. private static SessionFactory sessionFactory;
  4.  
  5. static
  6. {
  7. sessionFactory = new Configuration().configure().buildSessionFactory();
  8. }
  9.  
  10. public static Session openSession()
  11. {
  12. Session session = sessionFactory.openSession();
  13.  
  14. return session;
  15. }
  16.  
  17. public static void closeSession(Session session)
  18. {
  19. if(session != null)
  20. {
  21. session.close();
  22. }
  23. }
  24.  
  25. }

8.最后也就是分页页面显示pagePerson.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="s" uri="/struts-tags"%>
  3.  
  4. <html>
  5. <head>
  6. <base href="<%=basePath%>">
  7.  
  8. <title>My JSP 'pagePerson.jsp' starting page</title>
  9.  
  10. <meta http-equiv="pragma" content="no-cache">
  11. <meta http-equiv="cache-control" content="no-cache">
  12. <meta http-equiv="expires" content="">
  13. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  14. <meta http-equiv="description" content="This is my page">
  15.  
  16. <script type="text/javascript">
  17.  
  18. function validate()
  19. {
  20. var page = document.getElementsByName("page")[].value;
  21.  
  22. if(page > <s:property value="#request.pageBean.totalPage"/>)
  23. {
  24. alert("你输入的页数大于最大页数,页面将跳转到首页!");
  25.  
  26. window.document.location.href = "personAction";
  27.  
  28. return false;
  29. }
  30.  
  31. return true;
  32. }
  33.  
  34. </script>
  35.  
  36. </head>
  37.  
  38. <body>
  39.  
  40. <h1><font color="blue">分页查询</font></h1><hr>
  41.  
  42. <table border="" align="center" bordercolor="yellow" width="50%">
  43.  
  44. <tr>
  45. <th>序号</th>
  46. <th>姓名</th>
  47. <th>年龄</th>
  48. </tr>
  49.  
  50. <s:iterator value="#request.pageBean.list" id="person">
  51.  
  52. <tr>
  53. <th><s:property value="#person.id"/></th>
  54. <th><s:property value="#person.name"/></th>
  55. <th><s:property value="#person.age"/></th>
  56. </tr>
  57.  
  58. </s:iterator>
  59.  
  60. </table>
  61.  
  62. <center>
  63.  
  64. <font size=""><font color="red"><s:property value="#request.pageBean.totalPage"/></font></font>&nbsp;&nbsp;
  65. <font size=""><font color="red"><s:property value="#request.pageBean.allRows"/></font>条记录</font><br><br>
  66.  
  67. <s:if test="#request.pageBean.currentPage == 1">
  68. 首页&nbsp;&nbsp;&nbsp;上一页
  69. </s:if>
  70.  
  71. <s:else>
  72. <a href="personAction.action">首页</a>
  73. &nbsp;&nbsp;&nbsp;
  74. <a href="personAction.action?page=<s:property value="#request.pageBean.currentPage - "/>">上一页</a>
  75. </s:else>
  76.  
  77. <s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
  78. <a href="personAction.action?page=<s:property value="#request.pageBean.currentPage + "/>">下一页</a>
  79. &nbsp;&nbsp;&nbsp;
  80. <a href="personAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾页</a>
  81. </s:if>
  82.  
  83. <s:else>
  84. 下一页&nbsp;&nbsp;&nbsp;尾页
  85. </s:else>
  86.  
  87. </center><br>
  88.  
  89. <center>
  90.  
  91. <form action="personAction" onsubmit="return validate();">
  92. <font size="">跳转至</font>
  93. <input type="text" size="" name="page">
  94. <input type="submit" value="跳转">
  95. </form>
  96.  
  97. </center>
  98.  
  99. </body>
  100. </html>

至此,hibernate+struts2实现网页分页功能代码部分就完毕了,像hibernate与struts的配置文件就不列出来了,那些都不是重点!

页面效果如下:

hibernate和struts2实现分页功能的更多相关文章

  1. Strut2与Hibernate的一个web分页功能

    代码没有进行过多的封装,可能看起来有点action代码部分,hibernate在这里只起到了一个查询记录集的作用. import java.util.ArrayList; import java.ut ...

  2. hibernate和struts实现分页

    仓促把功能进行实现一下  类与类之间也没有进行MVC式分开  重要的是逻辑 记录一下 希望其中的些许代码逻辑对你有用 TUserDaoImpl---dao层的实现 package com.pers.h ...

  3. 最新版ssh hibernate spring struts2环境搭建

    最新版ssh hibernate spring struts2环境搭建 最新版spring Framework下载地址:spring4.0.0RELEASE环境搭建 http://repo.sprin ...

  4. 总结Spring、Hibernate、Struts2官网下载jar文件

    一直以来只知道搭SSH需要jar文件,作为学习的目的,最好的做法是自己亲自动手去官网下.不过官网都是英文,没耐心一般很难找到下载入口,更何 况版本的变化也导致不同版本jar文件有些不一样,让新手很容易 ...

  5. 基于SSM框架的简易的分页功能——包含maven项目的搭建

    新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ...

  6. SSH, 整合分页功能,连带DAO经典封装

    任何一个封装讲究的是,使用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...

  7. 带分页功能的SSH整合,DAO层经典封装

    任何一个封装讲究的是,使用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...

  8. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  9. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

随机推荐

  1. 常用的Linux操作一

    Linux 常用的操作必须明白. 1.ls  和ll 列出文件的目录. 2.tail -f XXX  查看文件. 3.chmod -R 777 XXX.jar 赋予权限 4.cat 查看文件 -n 对 ...

  2. Android 网络技术HTTP

    1.XML3种解析方式(DOM.SAX.PULL) 在网络上传输数据时最常用的格式有两种,XML 和JSON 这里首先明白什么是SAX是一个用于处理XML事件驱动的"推"模型,优点 ...

  3. iOS中sqlite3操作

    声明:下面命令我没有所有使用过, 仅用于收藏, 欢迎大家指出当中的错误 'SELECT  count(*)   FROM sqlite_master WHERE type="table&qu ...

  4. Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历

    1. Collection集合存储学生对象并遍历: 需求:存储自定义对象并遍历Student(name,age) 分析: (1)创建学生类 (2)创建集合对象 (3)创建学生对象 (4)把学生对象添加 ...

  5. MediaCodec文档翻译

    MediaCodec|文档翻译 classoverView mediacodec类可以用来调用系统底层的编码/解码软件. mediacodec一般是这么用的: MediaCodec codec = M ...

  6. 【开源java游戏框架libgdx专题】-15-系统控件-Button类

    Button类继承与Actor类,可以在舞台中使用,但是它也继承了许多Actor的子类,如Group.Table.WidgetGroup灯. 常用构造方法: Button():创建按钮对象,不设置其样 ...

  7. webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)

    1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...

  8. 2015-09-21CSS:引入方式、选择器、注释、文字样式

    1.HTML中引入CSS的方式 HTML中引入CSS的样式有4种:行内式.内嵌式.导入式和链接式. ⑴行内式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用 ...

  9. LINQ:使用Take和Skip实现分页

    随便找的,还没有试过代码. class Program { static int Main() { //每页大小 ; //页码 ; //源数据 string[] names = { "贤静& ...

  10. 三、T4模板与实体生成

         上文我们最后虽然用模板创建了一个实体类,但是类的内容仍旧是静态的,这里我们需要用动态方式生成类的内容.因为需要查询数据库这里又免不了各种繁琐的连接数据库操作,为了使我们的编码更加直观,仍然采 ...