在拜读了各位大牛的博客后,加以修改和添加总算是借鉴出了一个可行的分页实现。(●'◡'●)

话不多说,先贴两张效果图吧

接下来是实现代码:

pagingDAOImpl.java

  1. public class pagingDAOImpl implements pagingDAO{
  2.  
  3. public List<PagingTest> getPerPageList(String hql, int firstResult, int pageSize)
  4. {
  5. Session session = HibernateSessionFactory.getSession();
  6. Transaction tx = null;
  7. List<PagingTest> list = null;
  8.  
  9. try
  10. {
  11. tx = session.beginTransaction();
  12.  
  13. Query query = session.createQuery(hql).setFirstResult(firstResult).setMaxResults(pageSize);
  14.  
  15. list = query.list();
  16.  
  17. tx.commit();
  18.  
  19. }
  20. catch (Exception e)
  21. {
  22. if(tx != null)
  23. {
  24. tx.rollback();
  25. }
  26.  
  27. e.printStackTrace();
  28. }
  29. finally
  30. {
  31. session.close();
  32. }
  33.  
  34. return list;
  35. }
  36.  
  37. @Override
  38. public int getTotalRows(String hql) {
  39. Session session = HibernateSessionFactory.getSession();
  40. Transaction tx = null;
  41. int totalRows = 0;
  42. try
  43. {
  44. tx = session.beginTransaction();
  45.  
  46. Query query = session.createQuery(hql);
  47.  
  48. totalRows = query.list().size();
  49.  
  50. tx.commit();
  51.  
  52. }
  53. catch (Exception e)
  54. {
  55. if(tx != null)
  56. {
  57. tx.rollback();
  58. }
  59.  
  60. e.printStackTrace();
  61. }
  62. finally
  63. {
  64. session.close();
  65. }
  66.  
  67. return totalRows;
  68. }
  69. }

pagingServiceImpl.java

  1. public class pagingServiceImpl implements pagingService {
  2. private pagingDAO pagingDAO = new pagingDAOImpl();
  3.  
  4. /**
  5. * pageSize为每页显示的记录数
  6. * page为当前显示的网页
  7. */
  8.  
  9. public PageBean getPageBean(int pageSize, int page)
  10. {
  11. PageBean pageBean = new PageBean();
  12.  
  13. String hql = "from PagingTest";
  14.  
  15. int totalRows = pagingDAO.getTotalRows(hql);
  16.  
  17. int totalPage = pageBean.getTotalPages(pageSize, totalRows);
  18.  
  19. int currentPage = pageBean.getCurPage(page);
  20.  
  21. int firstResult = pageBean.getCurrentPageFirstResult(pageSize, currentPage);
  22.  
  23. List<PagingTest> list = pagingDAO.getPerPageList(hql, firstResult, pageSize);
  24.  
  25. pageBean.setList(list);
  26. pageBean.setTotalRows(totalRows);
  27. pageBean.setCurrentPage(currentPage);
  28. pageBean.setTotalPage(totalPage);
  29.  
  30. return pageBean;
  31. }
  32. }

PageBean.java

  1. public class PageBean
  2. {
  3. private List<PagingTest> list; //通过hql从数据库分页查询出来的list集合
  4.  
  5. private int totalRows; //总记录数
  6.  
  7. private int totalPage; //总页数
  8.  
  9. private int currentPage; //当前页
  10.  
  11. public List<PagingTest> getList()
  12. {
  13. return list;
  14. }
  15.  
  16. public void setList(List<PagingTest> list)
  17. {
  18. this.list = list;
  19. }
  20.  
  21. public int getTotalRows()
  22. {
  23. return totalRows;
  24. }
  25.  
  26. public void setTotalRows(int totalRows)
  27. {
  28. this.totalRows = totalRows;
  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 totalRows 总记录数
  55. * @return 总页数
  56. */
  57. public int getTotalPages(int pageSize, int totalRows)
  58. {
  59. int totalPage = (totalRows % pageSize == 0)? (totalRows / pageSize): (totalRows / pageSize) + 1;
  60.  
  61. return totalPage;
  62. }
  63.  
  64. /**
  65. * 得到当前开始记录号
  66. * @param pageSize 每页记录数
  67. * @param currentPage 当前页
  68. * @return
  69. */
  70. public int getCurrentPageFirstResult(int pageSize, int currentPage)
  71. {
  72. int firstResult = pageSize * (currentPage - 1);
  73.  
  74. return firstResult;
  75. }
  76.  
  77. /**
  78. * 得到当前页, 如果为0 则开始第一页,否则为当前页
  79. * @param page
  80. * @return
  81. */
  82. public int getCurPage(int page)
  83. {
  84. int currentPage = (page == 0)? 1: page;
  85.  
  86. return currentPage;
  87. }
  88.  
  89. }

PagingAction.java

  1. public class PagingAction extends ActionSupport
  2. {
  3. private pagingService pagingService = new pagingServiceImpl();
  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 = pagingService.getPageBean(5, page);
  22.  
  23. ActionContext context=ActionContext.getContext();
  24. Map session=context.getSession();
  25.  
  26. session.put("pageBean", pageBean);
  27.  
  28. return SUCCESS;
  29. }
  30. public static void main(String[] args) {
  31.  
  32. }
  33. }

以上就是功能实现的相关代码,至于dao,service,HibernateSessionFactory之类的文件就不贴上来了,上面的代码才是精华!

基于struts2和hibernate的分页实现的更多相关文章

  1. struts2+spring+hibernate 实现分页

    在这里要感谢下这位博友发表的博文 http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html 通过对他代码的阅读,从而自己实现了网页分 ...

  2. 基于struts2和hibernate的登录和注册功能——完整实例

    1.该项目使用MySQL数据库,数据库名为test,表名info,如图所示: 2.配置web.xml(Struts2使用) <?xml version="1.0" encod ...

  3. 基于struts2、hibernate、spring、shiro、MySQL的项目开发

    使用maven管理jar包的依赖 < project xmlns = “ http://maven.apache.org/POM/4.0.0 ” xmlns :xsi = “ http://ww ...

  4. 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建

    1. 前言 基于Maven的开发方式开发项目已经成为主流.Maven能很好的对项目的层次及依赖关系进行管理.方便的解决大型项目中复杂的依赖关系.S2SH(Struts2+Spring+Hibernat ...

  5. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

  6. 粗浅看Struts2和Hibernate框架

    ----------------------------------------------------------------------------------------------[版权申明: ...

  7. struts2、hibernate的知识点

    以下内容是我在复习struts2.hibernate和spring的时候记下得到,部分书上找不到的内容来自网络 以下是网络部分的原文网站: http://blog.csdn.net/frankaqi/ ...

  8. Struts2 + Spring + Hibernate 通用 Service 和 DAO

    我在 Struts2 + Spring + Hibernate  项目开发中总结出了一个Service 和 DAO ,可以用于处理任何的pojo(bean).使用这两个Service 和 DAO 可以 ...

  9. SSH(Struts2+Spring+Hibernate)框架搭建流程

    添加支持 我先介绍的是MyEclipse9的自带框架支持搭建过程:(完全的步骤 傻瓜式的学习..~) 首先我们来搭建一个Web项目: 一.Hibernate(数据层)的搭建: 相关描述 Ⅰ.服务器与数 ...

随机推荐

  1. OSG计时器与时间戳

    static osg::Timer* sendMsgTimer = new osg::Timer; if (sendMsgTimer->time_m()>100)//100ms {// d ...

  2. 解决绝对定位div position: absolute 后面的<a> Link不能点击

    今天布局的时候,遇到一个bug,当DIV设置为绝对定位时,这个div后面的相对定位的层里面的<a>Link标签无法点击. 网上的解决方案是在绝对定位层里面添加:pointer-events ...

  3. Navicat Premium连接Oracle 问题汇总

  4. 从匿名方法到 Lambda 表达式的推演过程

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...

  5. direct path read

    在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读的,所以不存在direct pa ...

  6. UWP学习记录4-设计和UI之控件和模式1

    UWP学习记录4-设计和UI之控件和模式1 1.控件和事件简介 在 UWP 应用开发中,控件是一种显示内容或支持交互的 UI 元素. 控件是用户界面的构建基块. 我们提供了超过 45 种控件供你使用, ...

  7. windows和linux平台下的通用时间测试函数

    Time.cpp ////////////////////////////////////////////////////////////////////////////// // Timer.cpp ...

  8. 【Gson】互相转化

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 对象转为字符串 Strin ...

  9. OX中修改文件名

    右击文件,显示简介,名称与扩展名

  10. C++-Qt【5】-QT的QString,char*,QByteArray转化以及中文乱码的问题

    引用:http://blog.sina.com.cn/s/blog_a7e2c7490101oatt.html QTextCodec *codec = QTextCodec::codecForName ...