`

基于hibernate实现的分页技术

 
阅读更多

转自:http://blog.csdn.net/beyond667/article/details/7385332

先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可

先上代码:注意传进来的参数有 Page这类,后面有介绍

 

[javascript] view plaincopy
 
  1. public List<Article> queryByPage(final String username, final Page page) {  
  2.         return this.getHibernateTemplate().executeFind(new HibernateCallback() {  
  3.             public Object doInHibernate(Session session)  
  4.                     throws HibernateException, SQLException {  
  5.                 Query query = session.createQuery("select art from Article art where art.username = ?");  
  6.                 //设置参数  
  7.                 query.setParameter(0, username);  
  8.                 //设置每页显示多少个,设置多大结果。  
  9.                 query.setMaxResults(page.getEveryPage());  
  10.                 //设置起点  
  11.                 query.setFirstResult(page.getBeginIndex());  
  12.                 return query.list();  
  13.             }  
  14.         });  


上面关键代码是 setMaxResults(),和setFirstResult(),即设置最大显示值和起点

 

这里我们需要一个Page工具类,用来操作分页。

Page.java

 

[java] view plaincopy
 
  1. package com.fenye;  
  2.   
  3. public class Page {  
  4.     // 1.每页显示数量(everyPage)  
  5.     private int everyPage;  
  6.     // 2.总记录数(totalCount)  
  7.     private int totalCount;  
  8.     // 3.总页数(totalPage)  
  9.     private int totalPage;  
  10.     // 4.当前页(currentPage)  
  11.     private int currentPage;  
  12.     // 5.起始点(beginIndex)  
  13.     private int beginIndex;  
  14.     // 6.是否有上一页(hasPrePage)  
  15.     private boolean hasPrePage;  
  16.     // 7.是否有下一页(hasNextPage)  
  17.     private boolean hasNextPage;  
  18.   
  19.     public Page(int everyPage, int totalCount, int totalPage, int currentPage,  
  20.             int beginIndex, boolean hasPrePage, boolean hasNextPage) {  
  21.         this.everyPage = everyPage;  
  22.         this.totalCount = totalCount;  
  23.         this.totalPage = totalPage;  
  24.         this.currentPage = currentPage;  
  25.         this.beginIndex = beginIndex;  
  26.         this.hasPrePage = hasPrePage;  
  27.         this.hasNextPage = hasNextPage;  
  28.     }  
  29.   
  30.     //构造函数,默认  
  31.     public Page(){}  
  32.       
  33.     //构造方法,对所有属性进行设置  
  34.       
  35.       
  36.     public int getEveryPage() {  
  37.         return everyPage;  
  38.     }  
  39.   
  40.     public void setEveryPage(int everyPage) {  
  41.         this.everyPage = everyPage;  
  42.     }  
  43.   
  44.     public int getTotalCount() {  
  45.         return totalCount;  
  46.     }  
  47.   
  48.     public void setTotalCount(int totalCount) {  
  49.         this.totalCount = totalCount;  
  50.     }  
  51.   
  52.     public int getTotalPage() {  
  53.         return totalPage;  
  54.     }  
  55.   
  56.     public void setTotalPage(int totalPage) {  
  57.         this.totalPage = totalPage;  
  58.     }  
  59.   
  60.     public int getCurrentPage() {  
  61.         return currentPage;  
  62.     }  
  63.   
  64.     public void setCurrentPage(int currentPage) {  
  65.         this.currentPage = currentPage;  
  66.     }  
  67.   
  68.     public int getBeginIndex() {  
  69.         return beginIndex;  
  70.     }  
  71.   
  72.     public void setBeginIndex(int beginIndex) {  
  73.         this.beginIndex = beginIndex;  
  74.     }  
  75.   
  76.     public boolean isHasPrePage() {  
  77.         return hasPrePage;  
  78.     }  
  79.   
  80.     public void setHasPrePage(boolean hasPrePage) {  
  81.         this.hasPrePage = hasPrePage;  
  82.     }  
  83.   
  84.     public boolean isHasNextPage() {  
  85.         return hasNextPage;  
  86.     }  
  87.   
  88.     public void setHasNextPage(boolean hasNextPage) {  
  89.         this.hasNextPage = hasNextPage;  
  90.     }  
  91.   
  92. }  

Page工具类主要是封装页面信息,一共多少数据啊,一页显示多少啊,起点的序号,总页数,是否有上一页下一页,当前页。

 

还需要一个操作page的工具类,PageUtil.java

 

[javascript] view plaincopy
 
  1. package com.sanqing.fenye;  
  2. /* 
  3.  * 分页信息辅助类 
  4.  */  
  5. public class PageUtil {  
  6.       
  7.     public static Page createPage(int everyPage,int totalCount,int currentPage) {  
  8.         everyPage = getEveryPage(everyPage);  
  9.         currentPage = getCurrentPage(currentPage);  
  10.         int totalPage = getTotalPage(everyPage, totalCount);  
  11.         int beginIndex = getBeginIndex(everyPage, currentPage);  
  12.         boolean hasPrePage = getHasPrePage(currentPage);  
  13.         boolean hasNextPage = getHasNextPage(totalPage, currentPage);  
  14.         return new Page(everyPage, totalCount, totalPage, currentPage,  
  15.                 beginIndex, hasPrePage,  hasNextPage);  
  16.     }  
  17.       
  18.     public static Page createPage(Page page,int totalCount) {  
  19.         int everyPage = getEveryPage(page.getEveryPage());  
  20.         int currentPage = getCurrentPage(page.getCurrentPage());  
  21.         int totalPage = getTotalPage(everyPage, totalCount);  
  22.         int beginIndex = getBeginIndex(everyPage, currentPage);  
  23.         boolean hasPrePage = getHasPrePage(currentPage);  
  24.         boolean hasNextPage = getHasNextPage(totalPage, currentPage);  
  25.         return new Page(everyPage, totalCount, totalPage, currentPage,  
  26.                 beginIndex, hasPrePage,  hasNextPage);  
  27.     }  
  28.       
  29.     //设置每页显示记录数  
  30.     public static int getEveryPage(int everyPage) {  
  31.         return everyPage == 0 ? 10 : everyPage;  
  32.     }  
  33.       
  34.     //设置当前页  
  35.     public static int getCurrentPage(int currentPage) {  
  36.         return currentPage == 0 ? 1 : currentPage;  
  37.     }  
  38.       
  39.     //设置总页数,需要总记录数,每页显示多少  
  40.     public static int getTotalPage(int everyPage,int totalCount) {  
  41.         int totalPage = 0;  
  42.         if(totalCount % everyPage == 0) {  
  43.             totalPage = totalCount / everyPage;  
  44.         } else {  
  45.             totalPage = totalCount / everyPage + 1;  
  46.         }  
  47.         return totalPage;  
  48.     }  
  49.       
  50.     //设置起始点,需要每页显示多少,当前页  
  51.     public static int getBeginIndex(int everyPage,int currentPage) {  
  52.         return (currentPage - 1) * everyPage;  
  53.     }  
  54.       
  55.     //设置是否有上一页,需要当前页  
  56.     public static boolean getHasPrePage(int currentPage) {  
  57.         return currentPage == 1 ? false : true;  
  58.     }  
  59.       
  60.     //设置是否有下一个,需要总页数和当前页  
  61.     public static boolean getHasNextPage(int totalPage, int currentPage) {  
  62.         return currentPage == totalPage || totalPage == 0 ? false : true;  
  63.     }  
  64.       
  65. }  

创建Page只需要3个参数,每页显示多少数据,当前页,总共多少数据,其他的4个参数都可以通过这三个计算出来

 

所以后面要创建Page,只需要调用这工具方法PageUtil.createPage(3个参数),就返回一Page.

返回的Page就是前面参数的Page,即要显示的分页

这样就算完成了分页的功能。

分享到:
评论

相关推荐

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...

    基于hibernate_mysql分页通用源码

    【标题】"基于hibernate_mysql分页通用源码"涉及的关键知识点主要集中在Java Web开发领域,特别是关于ORM框架Hibernate、关系型数据库MySQL、MVC框架Struts2以及分页技术的应用。以下是对这些核心概念的详细解释: ...

    hibernate实现分页查询

    ### Hibernate 实现分页查询详解 #### 一、引言 在进行数据库操作时,为了提高用户体验和系统性能,分页查询是一项非常重要的技术。...以上就是关于Hibernate实现分页查询的具体介绍,希望对大家有所帮助。

    hibernate实现分页

    【标题】:“Hibernate实现分页” 在Web应用程序开发中,数据分页是一种常见的需求,它有助于提高用户体验,尤其是在处理大量数据时。Hibernate作为一款流行的Java持久化框架,提供了多种方式来实现分页查询。本...

    基于hibernate实现的分页技术实例分析

    总结来说,使用Hibernate实现分页技术的关键在于利用`Query`对象的`setMaxResults()`和`setFirstResult()`方法。通过自定义的`Page`类,我们可以方便地管理和传递分页相关的参数,从而实现灵活的分页功能。在实际...

    jsp+hibernate实现的分页,java代码

    本项目中的代码应该包含了上述所有步骤的实现,通过阅读和学习这些代码,你可以深入了解如何在实际项目中运用`jsp`和`Hibernate`实现分页。这不仅有助于提升你的Java Web开发技能,也有助于理解Web应用中的数据处理...

    struts+hibernate实现分页.rar

    本项目“struts+hibernate实现分页”结合了这两个强大的工具,旨在展示如何在实际应用中实现数据的分页显示,以提高用户体验并优化系统性能。 分页是Web应用程序中常见的功能,特别是在处理大量数据时。它将数据库...

    hibernate分页Hibernate 分页的设计和编码

    标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...

    基于Java-Web的分页技术研究.pdf

    本文研究了基于Java-Web的分页技术,这对于提高Web应用的信息检索效率和用户体验具有重要意义。分页显示技术允许用户通过分块的方式查看大量数据,避免了数据量过大而导致的性能下降和用户体验下降的问题。 在引言...

    struts hibernate spring 分页ssh分页

    2. **在DAO层实现分页查询**:使用Hibernate的Criteria、HQL或者SQL配合分页参数(如页码和每页大小)来执行分页查询。 3. **在Service层处理分页逻辑**:Service层根据业务需求,调用DAO层的分页查询方法,并返回...

    hibernate中实现真分页和假分页技术

    在Java的持久化框架Hibernate中,分页查询是常见的需求,它...总之,理解和熟练运用Hibernate中的分页技术对于优化系统性能至关重要,无论是假分页还是真分页,都需要根据实际项目的需求和数据量来选择合适的实现方式。

    springMVC+spring+hibernate+jquery分页完整项目,完整代码

    本项目是一个基于SpringMVC、Spring、Hibernate和jQuery的完整分页应用,涵盖了后端服务、数据持久化、前端交互等多个重要技术领域。下面将详细解释这些技术及其在项目中的应用。 1. SpringMVC:SpringMVC是Spring...

    hibernate经典分页源代码

    Hibernate 提供了 Criteria API 和 HQL(Hibernate Query Language)来实现分页查询。 2. Hibernate Criteria API 分页: Hibernate 的 Criteria API 允许开发者以面向对象的方式构建动态查询。要实现分页,可以...

    hibernate分页查询

    Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults属性来实现分页。FirstResult表示从结果集的第几个元素开始获取,MaxResults...

    struts2.0 + hibernate + oracle 分页问题

    例如,可以使用`setFirstResult`和`setMaxResults`方法来限制返回的结果集,从而实现分页。 Oracle数据库是关系型数据库管理系统,它提供了丰富的SQL语法和性能优化手段。在分页查询时,Oracle支持ROWNUM伪列,可以...

    Struts+Hibernate+分页

    在Struts和Hibernate集成的项目中,实现分页通常需要以下步骤: 1. 在Action类中,根据用户请求的页码和每页记录数,计算出要查询的数据范围。 2. 使用Hibernate的Criteria或HQL查询,添加限制条件来获取指定范围的...

    ssh struts hibernate spring 分页

    Spring提供了Pageable接口和Page对象,配合JPA(Java Persistence API)或MyBatis等持久层框架,可以方便地实现分页功能。 在实际开发中,通常会结合这三个框架的优点,例如,使用Struts处理请求,Spring管理bean和...

    Hibernate通用分页

    "hibernatePagination"可能是与Hibernate分页相关的类库或者示例代码,用于指导如何在实际项目中实现分页。 在具体实现Hibernate分页时,主要涉及以下步骤: 1. 创建`Criteria`或`Query`对象:这是Hibernate执行...

Global site tag (gtag.js) - Google Analytics