`

基于SSH框架的分页实现

    博客分类:
  • SSH
阅读更多
  1. 参考网址1:http://www.blogjava.net/BlogJava522935502/  
  2.   
  3. 参考网址2:http://blog.csdn.net/qq522935502/  
  4.   
  5. 资料部分借鉴:http://www.blogjava.net/rongxh7/  
  6.   
  7. 上节课,我们完成了一个SSH整合的CRUD操作案例,并且完善了其国际化以及校验等内容,这节课,我们继续加以完善,我们知道,当我们查询数据库的内容过多的时候,显示在页面上的内容就比较冗长,所以分页的实现就显的十分有必要了。分页功能的实现是必不可少的,掌握一到两种分页技术在在实际开发前是有必要的,前两天浏览博客的时候看到了一个程序员的博文写的一个分页功能的实现非常好,在这里,分享给大家。  
  8.   
  9. 在讲解分页功能实现之前,大家必须对分页有一定的了解,知道分页的几个要素:总记录数,每页显示数,共几页,当前页等。  
  10.   
  11. 在上个例子的基础上我们开始完善我们的程序。  
  12.   
  13. 1.首先我们先新建立一个接口MemberDao.java,把所需要用到的方法列出来:  
  14.   
  15. [java] view plaincopyprint?  
  16. package cn.zbvc.dao;    
  17. import java.util.List;    
  18. import cn.zbvc.bean.User;    
  19. public interface MemberDao {    
  20. /**   
  21.  * 分页查询   
  22.  * @param hql  查询条件   
  23.  * @param offset  开始记录   
  24.  * @param length  一次查询几条记录   
  25.  * @return 查询的记录集合   
  26.  */    
  27. public List<User> queryForPage(final String hql,final int offset,final int length);    
  28. /**   
  29.  * 查询所有的记录数   
  30.  * @param hql 查询条件   
  31.  * @return 总记录数   
  32.  */    
  33. public int getAllRowCount(String hql);    
  34. }    
  35.   
  36.   
  37. 2.然后我们创建其实现类:MemberDaoImpl.java  
  38.   
  39. [java] view plaincopyprint?  
  40. package cn.zbvc.dao.impl;    
  41. import java.util.List;    
  42. import org.hibernate.Query;    
  43. import org.hibernate.Session;    
  44. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;    
  45. import cn.zbvc.bean.User;    
  46. import cn.zbvc.dao.MemberDao;    
  47. public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {    
  48. /**   
  49.  * 查询所有的记录数   
  50.  * @param hql 查询条件   
  51.  * @return 总记录数   
  52.  */    
  53. public int getAllRowCount(String hql) {    
  54. return this.getHibernateTemplate().find(hql).size();    
  55. }    
  56. /**   
  57.  * 分页查询   
  58.  * @param hql  查询条件   
  59.  * @param offset  开始记录   
  60.  * @param length  一次查询几条记录   
  61.  * @return 查询的记录集合   
  62.  */    
  63. @SuppressWarnings("unchecked")    
  64. public List<User> queryForPage(final String hql, final int offset, final int length) {    
  65. Session session = this.getSession();    
  66. Query q = session.createQuery(hql);    
  67. q.setFirstResult(offset);    
  68. q.setMaxResults(length);    
  69. List<User> list = q.list();    
  70. System.out.println(list.size());    
  71. session.close();    
  72. return list;    
  73. }    
  74.   
  75.   
  76. 大家可以看到,我们一共定义了两个方法,第一个方式是获取数据库表的总记录数,第二个方法是获取我们想要获取的某一页的数据集合,传递的三个参数分别是:查询条件、开始的记录、结束的记录。  
  77.   
  78. 细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对Hibernate支持的类,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。  
  79.   
  80. 3.然后我们需要建立一个获取分页信息的pageBean.java:  
  81.   
  82. [java] view plaincopyprint?  
  83. package cn.zbvc.util;    
  84. import java.util.List;    
  85. import cn.zbvc.bean.User;    
  86. public class PageBean {    
  87. private List<User> list;  //要返回的某一页的记录列表    
  88. private int allRow; //总记录数    
  89. private int totalPage;  //总页数    
  90. private int currentPage;  //当前页    
  91. private int pageSize;  //每页的记录数    
  92. private boolean isFirstPage;  //是否为当前第一页    
  93. private boolean isLastPage;  //是否为最后一页    
  94. private boolean hasPreviousPage;  //是否有前一页    
  95. private boolean hasNextPage;  //是否有下一页    
  96. Set and get方法...    
  97. PageBean中的具体方法:    
  98. /**   
  99.  * 初始化分页信息   
  100.  */    
  101. public void init(){    
  102. this.isFirstPage = isFirstPage;    
  103. this.isLastPage = isLastPage;    
  104. this.hasPreviousPage = hasPreviousPage;    
  105. this.hasNextPage = hasNextPage;    
  106. }    
  107. /**   
  108.  * 计算总页数  静态方法   
  109.  * @param pageSize  每页的记录数   
  110.  * @param allRow  总记录数   
  111.  * @return 总页数   
  112.  */    
  113. public static int countTatalPage(final int pageSize,final int allRow){    
  114. int toalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize + 1;    
  115. return toalPage;    
  116. }    
  117. /**   
  118.  * 计算当前页开始的记录   
  119.  * @param pageSize 每页记录数   
  120.  * @param currentPage 当前第几页   
  121.  * @return 当前页开始记录号   
  122.  */    
  123. public static int countOffset(final int pageSize,final int currentPage){    
  124. final int offset = pageSize * (currentPage - 1);    
  125. return offset;    
  126. }    
  127. /**   
  128.  * 计算当前页,若为0或者请求的URL中没有“?page = ”则用1代替   
  129.  * @param page 传入的参数(可能为空,即0  则返回1)   
  130.  * @return   
  131.  */    
  132. public static int countCurrentPage(int page){    
  133. final int curpage = (page == 0 ? 1 : page);    
  134. return curpage;    
  135. }   }    
  136.   
  137.   
  138. 4.业务逻辑层的实现:我们现在就只操作User,现在我们在UserService中定义一个方法:  
  139.   
  140. [java] view plaincopyprint?  
  141. /**   
  142.  * 分页查询     
  143.  * @param pageSize  每页显示多少记录   
  144.  * @param currentPage 当前页   
  145.  * @return 封装了分页信息的bean   
  146.  */    
  147. public PageBean queryForPage(int pageSize,int page);    
  148. 5.使用UserServiceImpl实现这个具体方法:    
  149. /**   
  150.  * 分页查询     
  151.  * @param pageSize  每页显示多少记录   
  152.  * @param currentPage 当前页   
  153.  * @return 封装了分页信息的bean   
  154.  */    
  155. public PageBean queryForPage(int pageSize, int page) {    
  156. final String hql = "from User user order by user.id"; //查询语句    
  157. int allRow = memberDao.getAllRowCount(hql);  //总记录数    
  158. int totalPage = PageBean.countTatalPage(pageSize, allRow); //总页数    
  159. final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录    
  160. final int length = pageSize; // 每页记录数    
  161. final int currentPage = PageBean.countCurrentPage(page); // 当前页    
  162. List list = memberDao.queryForPage(hql, offset, length); //    
  163. //把分页信息保存到Bean当中    
  164. PageBean pageBean  = new PageBean();    
  165. pageBean.setPageSize(pageSize);    
  166. pageBean.setCurrentPage(currentPage);    
  167. pageBean.setAllRow(allRow);    
  168. pageBean.setTotalPage(totalPage);    
  169. pageBean.setList(list);    
  170. pageBean.init();    
  171. return pageBean;    
  172. }    
  173.   
  174.   
  175. 6.然后我们为了不影响上一个例子,我们新创建一个ListUserAction2.java:  
  176.   
  177. [java] view plaincopyprint?  
  178. package cn.zbvc.action.user;    
  179. import java.util.List;    
  180. import com.opensymphony.xwork2.ActionSupport;    
  181. import cn.zbvc.bean.User;    
  182. import cn.zbvc.service.UserService;    
  183. import cn.zbvc.util.PageBean;    
  184. public class ListUserAction2 extends ActionSupport {    
  185. private UserService service;//通过Spring创建业务层对象  使用set方法依赖注入    
  186. private PageBean pageBean; //封装了分页信息和数据内容的pageBean    
  187. private List<User> listUser;//用于储存pageBean当中被封装的User信息    
  188. private int page = 1; //表示从网页中返回的当前页的值  默认为1 表示默认显示第一页内容    
  189. public int getPage() {    
  190. return page;    
  191. }    
  192. public void setPage(int page) {    
  193. this.page = page;    
  194. }    
  195. public List<User> getListUser() {    
  196. return listUser;    
  197. }    
  198. public void setListUser(List<User> listUser) {    
  199. this.listUser = listUser;    
  200. }    
  201. public PageBean getPageBean() {    
  202. return pageBean;    
  203. }    
  204. public void setPageBean(PageBean pageBean) {    
  205. this.pageBean = pageBean;    
  206. }    
  207. public void setService(UserService service) {    
  208. this.service = service;    
  209. }    
  210. public String execute()throws Exception{    
  211. this.pageBean = service.queryForPage(5, page);//获取封装了分页信息和数据的pageBean    
  212. this.listUser = this.pageBean.getList(); //获取数据    
  213. return SUCCESS;    
  214. }    
  215. }    
  216.   
  217.   
  218. 7.配置applicationContext.xml和struts.xml的相关信息,这里省略了。  
  219.   
  220. 8.在listUser2.jsp页面中添加分页内容:  
  221.   
  222. [html] view plaincopyprint?  
  223. <s:iterator value="pageBean">    
  224.         <tr>    
  225.          <td colspan="6" align="center" bgcolor="#5BA8DE">    
  226.          共<s:property value="allRow"/>条记录        
  227.          共<s:property value="totalPage"/>页        
  228.          当前第<s:property value="currentPage"/><br>    
  229.         
  230.          <s:if test="%{currentPage == 1}">    
  231.            第一页  上一页    
  232.          </s:if>    
  233.          <!-- currentPage为当前页 -->    
  234.          <s:else>    
  235.            <a href="listUser2.action?page=1">第一页</a>    
  236.            <a href="listUser2.action?page=<s:property value="%{currentPage-1}"/>">上一页</a>    
  237.          </s:else>    
  238.         
  239.          <s:if test="%{currentPage != totalPage}">    
  240.          <a href="listUser2.action?page=<s:property value="%{currentPage+1}"/>">下一页</a>    
  241.          <a href="listUser2.action?page=<s:property value="totalPage"/>">最后一页</a>    
  242.          </s:if>    
  243.         
  244.          <s:else>    
  245.          下一页  最后一页    
  246.          </s:else>    
  247.          </td>    
  248.         </tr>    
  249. </s:iterator>    
  250.   
  251.   
  252. 9.查看效果:  
  253.   
  254.   
  255. 10.思考总结  
  256.   
  257. 关于分页功能实现,应该是有有很多种解决方法,我介绍的这种解决方案是为了给大家一个  
  258.   
  259. 范例,让大家明白分页功能实现的原理,其中,大部分的内容借鉴了之前提到的网址。接下来的时间,我会继续学习关于分页功能的其它实现方式,然后分享给大家,另外,还会继续的整理SSH的整合。  
分享到:
评论

相关推荐

    基于SSH框架分页实现方法

    基于SSH技术实现分页管理信息,代码几乎不用修改,直接能通,方便大家使用

    ssh框架的分页功能

    本篇将详细介绍SSH框架下的分页实现。 一、Struts2分页 Struts2作为控制层,负责处理HTTP请求和转发到相应的Action。在SSH框架中,我们可以使用Struts2的拦截器或者自定义插件来实现分页。拦截器可以在Action执行...

    分页源码,基于SSH框架封装的,ssh分页

    基于SSH框架的分页源码是开发者在处理大数据集时的一种实用工具,它能够有效地管理数据库查询,减少服务器负载,并使用户能够方便地浏览和导航大量的信息。 首先,Struts2作为表现层框架,负责处理HTTP请求和响应,...

    基于SSH2框架的分页查询代码

    本资源主要为基于SSH2的分页查询技术,通过自己的测试,需要修改一些信息,使用HTML的onsubmit事件,.txt文档内从前台到后台的代码都有,是一个例子。

    java大作业基于SSH框架的学生成绩管理系统源码.zip

    java基于SSH框架的学生成绩管理系统源码。要求: (1) 整合Struts2、Spring和Hibernate框架 (2) 实现“登录”功能 (3) 实现“学生信息管理”功能 (4) 实现“学生成绩管理”功能 (5) 实现分页功能 目的...

    基于SSH框架的分页示例

    在这个“基于SSH框架的分页示例”中,我们将探讨如何在Struts2控制层、Hibernate持久层以及Spring服务层实现数据的分页展示。 **1. Struts2 分页** Struts2作为MVC框架,主要负责处理用户请求和转发到相应的Action...

    基于SSH框架的增删改查示例(包括分页)

    这个"基于SSH框架的增删改查示例(包括分页)"是一个典型的后端开发实例,主要涵盖了如何利用SSH框架实现对数据库的CRUD操作以及分页功能,特别适用于初学者理解这一经典技术栈的使用方法。 首先,Spring框架是核心...

    基于ssh框架的通讯录案例

    这个基于SSH框架的通讯录案例提供了一个全面的功能实现,旨在帮助开发者理解和掌握SSH框架的实际应用。 首先,Struts2是MVC(Model-View-Controller)架构模式的一种实现,负责处理HTTP请求并调度应用程序的行为。...

    基于SSH的分页

    **基于SSH的分页技术详解** 在Web开发领域,SSH(Struts2、Spring、Hibernate)框架组合是Java EE应用中...在提供的压缩包"fenye"中,包含了具体的SSH分页实现代码,新手可以直接导入运行,以此为起点进行学习和实践。

    基于SSH的分页实例

    在分页实现中,Struts2可以定义Action类来处理分页相关的逻辑,包括接收参数(如当前页数、每页显示条数等),计算总页数,以及准备分页链接。此外,Action还可以与服务层进行交互,获取特定页的数据。 **2. Spring...

    基于SSH2实现的分页效果

    在这个基于SSH2实现的分页效果项目中,我们主要关注的是如何在SSH2框架下实现动态、高效的数据库查询分页功能,以及在MySQL数据库上操作数据。下面我们将详细探讨相关的知识点。 首先,Struts2作为MVC框架,负责...

    基于SSH框架的食堂订餐系统

    【基于SSH框架的食堂订餐系统】是一款使用JavaEE技术栈开发的学生食堂订餐平台,主要采用Struts2(S)作为MVC架构的控制器,Spring(S)负责依赖注入和业务逻辑管理,Hibernate(H)用以处理数据持久化。这个系统...

    web项目ssh框架分页

    根据给定的信息,我们可以深入探讨一下在Web项目中如何运用SSH框架进行分页处理的相关知识点。这里我们将重点介绍以下几个方面: ### 一、SSH框架简介 SSH是Struts2 + Spring + Hibernate三个开源框架的首字母缩写...

    SSH 通用分页插件

    SSH分页插件通常都能提供相应的解决方案,使得开发者可以更加专注于业务逻辑,而非基础的分页实现。 综上所述,SSH通用分页插件是Java Web开发中的一个重要工具,它简化了数据分页的实现,提高了代码的可读性和维护...

    ssh框架的模糊查询

    在"ssh框架的模糊查询"这个主题中,我们将深入探讨如何在SSH框架下实现对数据的增删改查(CRUD)操作,以及模糊查询和分页显示功能。 首先,让我们来理解增删改查的基础。在SSH框架中,Struts2作为前端控制器处理...

    基于SSH框架的BBS源代码

    【基于SSH框架的BBS源代码】是一种使用Spring、Struts和Hibernate这三大主流Java开源框架构建的在线论坛系统。SSH框架是Java Web开发中常用的技术栈,它们各自负责应用程序的不同层面,协同工作以实现高效、灵活的...

    ssh框架实现增删改查源码

    在实际开发中,为了实现分页查询,SSH框架通常会结合使用Struts2的拦截器和Spring的数据源来控制每页数据的数量和当前页码。在Action中,定义方法接收分页参数,Service层调用DAO进行分页查询,然后返回结果集。在...

    SSH下实现的增删改查分页简单的模糊查询

    本文将深入探讨如何在SSH框架下实现增删改查(CRUD)功能,以及分页和模糊查询的技术细节。 首先,Spring框架是整个应用的中枢,它负责依赖注入(DI)和面向切面编程(AOP),提供了事务管理和其他企业级服务。...

    基于SSH技术的通用框架系统

    **基于SSH技术的通用框架系统详解** SSH,全称为Struts2、Spring和Hibernate的组合,是Java开发中...开发者可以通过学习此系统,掌握SSH框架的整合使用,以及DataGrid和树形菜单的实现方法,提升自己的Java开发能力。

Global site tag (gtag.js) - Google Analytics