`
mixer_a
  • 浏览: 371816 次
社区版块
存档分类
最新评论

使用Hibernate3实现分页功能

阅读更多

 

 http://blog.csdn.net/zhjb1025/archive/2006/04/19/668631.aspx

  整理的代码如下:

  Page.Java接口

packageorg.domain.scrm4u.helper;
importjava.util.List;
publicinterfacePage{
  booleanisFirstPage();
  booleanisLastPage();
  booleanhasNextPage();
  booleanhASPreviousPage();
  intgetLastPageNumber();
  List<?>getThisPageElements();
  intgetTotalNumberOfElements();
  intgetThisPageFirstElementNumber();
  intgetThisPageLastElementNumber();
  intgetNextPageNumber();
  intgetPreviousPageNumber();
  intgetPageSize();
  intgetPageNumber();
}
 

  ListPage.java实现:

packageorg.domain.scrm4u.helper.impl;
importjava.util.List;
importorg.domain.scrm4u.helper.Page;
publicclassListPageimplementsPage{
  privateList<?>elements;
  privateintpageSize;
  privateintpageNumber;
  publicListPage(List<?>elements,intpageNumber,intpageSize){
    this.elements=elements;
    this.pageSize=pageSize;
    this.pageNumber=pageNumber;
    if(Integer.MAX_VALUE==this.pageNumber)this.pageNumber=(getTotalNumberOfElements()/this.pageSize);
  }
  publicbooleanisFirstPage(){
    returngetPageNumber()==0;
  }
  publicbooleanisLastPage(){
    returngetPageNumber()>=getLastPageNumber();
  }
  publicbooleanhasNextPage(){
    return((getPageNumber()+1)*getPageSize())<(getTotalNumberOfElements()+1);
  }
  publicbooleanhasPreviousPage(){
    returngetPageNumber()>0;
  }
  publicintgetLastPageNumber(){
    doubletotalResults=newInteger(getTotalNumberOfElements()).doubleValue();
    returnnewDouble(Math.floor(totalResults/getPageSize())).intValue();
  }
  publicList<?>getThisPageElements(){
    finalintstart=getPageNumber()*getPageSize();
    returnelements.subList(
          Math.min(start,getTotalNumberOfElements()+1), 
          Math.min(start+getPageSize(),getTotalNumberOfElements()+1)
       );
  }
  publicintgetTotalNumberOfElements(){
    returnelements.size()-1;
  }
  publicintgetThisPageFirstElementNumber(){
    returngetPageNumber()*getPageSize()+1;
  }
  publicintgetThisPageLastElementNumber(){
    intfullPage=getThisPageFirstElementNumber()+getPageSize()-1;
    returngetTotalNumberOfElements()<fullPage?getTotalNumberOfElements():fullPage;
  }
  publicintgetNextPageNumber(){
    returngetPageNumber()+1;
  }
  publicintgetPreviousPageNumber(){
    returngetPageNumber()-1;
  }
  publicintgetPageSize(){
    returnpageSize;
  }
  publicintgetPageNumber(){
    returnpageNumber;
  }
}
 

 

 

 HibernatePage.Java实现:

packageorg.domain.scrm4u.helper.impl;
importjava.util.List;
importorg.domain.scrm4u.helper.Page;
importorg.hibernate.HibernateException;
importorg.hibernate.Query;
importorg.hibernate.ScrollMode;
importorg.hibernate.ScrollableResults;
publicclassHibernatePageimplementsPage{
  protectedList<?>elements;
  protectedintpageSize;
  protectedintpageNumber;
  protectedinttotalElements=0;
  privateScrollableResultsscrollableResults;
  privateHibernatePage(intpageNumber,intpageSize){
    this.pageNumber=pageNumber;
    this.pageSize=pageSize;
  }
  publicbooleanisFirstPage(){
    returngetPageNumber()==0;
  }
  publicbooleanisLastPage(){
    returngetPageNumber()>=getLastPageNumber();
  }
  publicbooleanhasNextPage(){
    returnelements.size()>getPageSize();
  }
  publicbooleanhASPreviousPage(){
    returngetPageNumber()>0;
  }
  publicintgetLastPageNumber(){
    doubletotalResults=newInteger(getTotalNumberOfElements()).doubleValue();
    returnnewDouble(Math.floor(totalResults/getPageSize())).intValue();
  }
  publicList<?>getThisPageElements(){
    returnhasNextPage()?elements.subList(0,getPageSize()):elements;
  }
  publicintgetTotalNumberOfElements(){
    returntotalElements;
  }
  publicintgetThisPageFirstElementNumber(){
    returngetPageNumber()*getPageSize()+1;
  }
  publicintgetThisPageLastElementNumber(){
    intfullPage=getThisPageFirstElementNumber()+getPageSize()-1;
    returngetTotalNumberOfElements()<fullPage?getTotalNumberOfElements():fullPage;
  }
  publicintgetNextPageNumber(){
    returngetPageNumber()+1;
  }
  publicintgetPreviousPageNumber(){
    returngetPageNumber()-1;
  }
  publicintgetPageSize(){
    returnpageSize;
  }
  publicintgetPageNumber(){
    returnpageNumber;
  }
  publicstaticHibernatePagegetScrollPage(Queryquery,intpageNumber,intpageSize,ScrollModescrollMode){
    HibernatePagesp=newHibernatePage(pageNumber,pageSize);
    try{
      sp.scrollableResults=query.scroll(scrollMode);
      if(scrollMode==ScrollMode.SCROLL_SENSITIVE){
        sp.scrollableResults.last();
        sp.totalElements=sp.scrollableResults.getRowNumber();
      }else{
        sp.totalElements=sp.calculateTotalElementsByList(query);
      }
      sp.determineElements(query);
    }catch(HibernateExceptione){
      e.printStackTrace();
    }
    returnsp;
  }
  privatevoiddetermineElements(Queryquery)throwsHibernateException{
    if(Integer.MAX_VALUE==this.pageNumber)this.pageNumber=(getTotalNumberOfElements()/this.pageSize);
    elements=query.setFirstResult(this.pageNumber*this.pageSize).setMaxResults(this.pageSize+1).list();
  }
  privateintcalculateTotalElementsByList(Queryquery)throwsHibernateException{
    returnquery.list().size();
  }
}
 

简单分析一下:

  ListPage实现需要把查询的结果集全部取出来。

  我们着重还是分析一下HibernatePage的实现。

  测试代码如下:

importJava.io.IOException;
importjava.sql.SQLException;
importjava.util.List;
importorg.hibernate.Query;
importorg.hibernate.ScrollMode;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.AnnotationConfiguration;
importorg.hibernate.cfg.Configuration;
importorg.domain.scrm4u.helper.Page;
importorg.domain.scrm4u.helper.impl.HibernatePage;
importorg.domain.scrm4u.entity.TPsn;
publicclassBusinessService{
  publicstaticvoidmain(String[]args)throwsIOException,SQLException{
    Configurationconfig= newAnnotationConfiguration().configure();
    SessionFactorysessionFactory=config.buildSessionFactory();   
    Sessionsession=sessionFactory.openSession();
    StringHql="fromTPsn";
    Queryquery=session.createQuery(Hql);
    Pagepage=HibernatePage.getScrollPage(query,0,10,ScrollMode.SCROLL_SENSITIVE);
    List<?>list=page.getThisPageElements();
    for(inti=0;i<list.size();i++){
      TPsnpsn=(TPsn)list.get(i);
      System.out.println(psn.getPsnNo()+"t"+psn.getPsnPnm()+"t"+psn.getPsnBrthDt());
    } 
    session.close();
    sessionFactory.close();
  }
}
 

 

  测试中发现:

  使用ScrollMode.SCROLL_SENSITIVE比ScrollMode.FORWARD_ONLY在性能上要快很多。具体选择要看使用的JDBC驱动是否支撑了,支持scroll的话就可以使用ScrollableResults类来处理结果集了。

  当然,我们还可以配合缓存技术让翻页更有效率。

  关于缓存请参看http://blog.csdn.net/kunshan_shenbin/archive/2008/09/03/2874992.ASPx。

分享到:
评论

相关推荐

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

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

    Struts + Hibernate 实现简单分页功能

    总的来说,使用Struts和Hibernate实现分页功能,需要结合MVC模式和ORM思想,合理设计数据访问层和业务逻辑层,同时确保前端与后端的有效通信。这个过程涉及到了Java编程、数据库操作、框架理解和页面渲染等多个方面...

    用户Hibernate实现的一个分页

    本教程将详细讲解如何使用Hibernate实现分页功能,这对于处理大量数据的Web应用来说至关重要,因为它能够有效地减少数据库负载,提高用户体验。 一、Hibernate分页基础 1. Hibernate的Query和Criteria API都提供了...

    Struts+Hibernate实现分页

    本篇将介绍如何使用Struts和Hibernate框架来实现Web应用中的分页功能。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它负责处理用户请求并控制应用程序的流程。而Hibernate则是一...

    在JDBC,hibernate中实现分页

    ### 在JDBC与Hibernate中实现分页功能 随着数据量的不断增长,...通过上述介绍可以看出,无论是使用Hibernate还是JDBC,合理设计和实现分页功能能够显著提升用户界面的性能和响应速度,同时也提高了系统的整体性能。

    spring-boot基于hibernate实现简单分页

    要实现分页功能,可以使用`Pageable`接口。创建一个服务类,注入刚才创建的Repository,并编写分页查询的方法: ```java import org.springframework.beans.factory.annotation.Autowired; import org.spring...

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

    本项目是基于`jsp`(Java Server Pages)和`Hibernate`框架实现的分页功能,通过Java代码来详细展示了如何在Web应用中高效地实现这一功能。 `jsp`是Java的一种动态网页技术,允许开发者在HTML中嵌入Java代码,以...

    spring+struts2+hibernate整合实现分页

    在这个项目中,“spring+struts2+hibernate整合实现分页”是一个基础教程,旨在帮助初学者理解如何在SSH框架下实现数据的分页展示。下面将详细讲解这个主题中的关键知识点。 1. **Spring框架**:Spring是Java应用的...

    用Hibernate实现分页查询.docx

    ### 使用Hibernate实现分页查询 #### 一、分页查询概念及原理 分页查询是一种在数据量较大的情况下,为了提高用户体验和系统性能而采取的一种技术手段。它将查询结果分成若干页显示,用户可以通过翻页操作查看不同...

    hibernate 模糊查询 分页

    本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...

    完整Struts2 HIBERNATE实现分页

    根据提供的标题、描述以及部分内文,我们可以梳理出关于如何使用Struts2与Hibernate实现分页功能的关键知识点。 ### Struts2与Hibernate简介 - **Struts2**:这是一个基于MVC架构的开源Web框架,它能帮助开发者...

    hibernate实现分页

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

    Hibernate二级缓存+分页功能

    在Java的持久化框架Hibernate中,二级缓存和分页功能是两个重要的优化手段,能够显著提升应用程序的性能和用户体验。下面将详细讲解这两个概念及其实际应用。 **一、Hibernate二级缓存** Hibernate一级缓存是指...

    hibernate实现分页查询

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

    sh分页sh分页

    hibernate分页

    Struts2+HIBERNATE实现分页(完整讲解)

    在这个教程中,我们将探讨如何利用Struts2和Hibernate实现分页功能。 **1. 数据库设计** 首先,我们需要一个简单的数据库表,如Tb_soft中的software表,包含一些基本字段如Tsoftware, fSoftname, fListImage等。...

    Struts + Hibernate 分页实现

    例如,使用Criteria API,我们可以设置`setFirstResult()`和`setMaxResults()`来实现分页。 此外,为了在页面上显示分页效果,我们需要在JSP(Java Server Pages)中使用Struts的标签库,如`s:iterator`标签遍历...

    Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码)

    本文将详细介绍如何在Struts2、Spring2和Hibernate3集成环境下实现经典的分页功能,并提供部分Java及JSP源代码示例。 #### 二、核心概念和技术介绍 1. **Struts2**:是一个开源的Web应用框架,它继承了Struts的...

    基于hibernate_mysql分页通用源码

    基于Hibernate的分页通常可以通过HQL(Hibernate Query Language)或者Criteria API实现,也可以结合数据库自身的分页功能,比如MySQL的LIMIT和OFFSET关键字。 4. Struts2:Struts2是一个强大的MVC(Model-View-...

    spring+hibernate 分页 +mysql

    这里我们讨论的是结合Spring、Hibernate和MySQL实现的分页功能,这是一个常见的技术栈组合,广泛应用于Web应用开发。 Spring是一个开源的Java框架,它提供了全面的编程和配置模型,用于构建企业级应用。Spring的IoC...

Global site tag (gtag.js) - Google Analytics