`
Franciswmf
  • 浏览: 800002 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

理解Hibernate中的query.setFirstResult(),query.setMaxResults(),取出任意n条数据

 
阅读更多
引用:http://blog.csdn.net/switzerland/article/details/3127992

一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两者的效率如何?
答:1.scroll是用JDBC2.0的可滚动结果集实现;query.setMaxResults();query.setFirstResult()是数据库SQL语句实现。

2.你说是在数据库就分页好呢?还是把结果集都取到内存再分页好呢?(应该是在数据库就分了好些吧,但是如果在内存分页的话,换页的时候是不是更快一些呢?)

3.在数据库进行分页是首选的方式。数据库分页实际上是利用数据库本身SQL扩展的功能进行分页,例如MySQL的 limit 0,50这样的SQL语句。不但速度快,而且非常节省内存。不过不是每种数据库的都有这种分页支持的SQL,例如SQL Server就不支持。

4.scroll是利用JDBC2.0的功能做分页的,那么就完全取决于特定数据库的JDBC Driver的实现了。事实上大部分JDBC Driver都是把所有的结果集都一次取到内存,然后再分页的。如果这个结果集非常大,例如几万条,不但程序执行速度会很慢,而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现,那么就不会导致这种问题,例如jTDS。


二、Hibernate可以使用Query.setMaxResults方法简单地设置需要查询的最大结果集。
然后Hibernate会自动根据所设置的数据库方言翻译成相应的SQL语句提交给数据库。比如如果数据库是Oracle,SQL Server等,则翻译为类似select ... top 10之类的SQL语句,若是MySQL,则翻译为select ... limit 10之类的SQL。


三、举例:
query.setFirstResult(0),query.setMaxResults(4);相当于MySQL中的limit 0, 4;
public void testQuery() {
  Session session = null;
  try {
    session = HibernateUtils.getSession();
    session.beginTransaction();
    Query query = session.createQuery("from User");
    query.setFirstResult(0);//从第一条记录开始
    query.setMaxResults(4);//取出四条记录
    List userList = query.list();
    for (Iterator iter=userList.iterator(); iter.hasNext();) {
      User user = (User)iter.next();
      System.out.println(user.getId());
      System.out.println(user.getName());
    }
    session.getTransaction().commit();
  }catch(Exception e) {
    e.printStackTrace();
    session.getTransaction().rollback();
  }finally {
    HibernateUtils.closeSession(session);
  }
}
分享到:
评论

相关推荐

    Hibernate中的query 分页.doc

    本文将探讨Hibernate中两种主要的分页方式:`query.scroll()`和使用`query.setFirstResult(), query.setMaxResults()`。 首先,`query.scroll()`方法基于JDBC 2.0的可滚动结果集实现。这种方式允许应用程序在结果...

    \Hibernate_query条件查询

    《Hibernate查询条件查询详解》 Hibernate作为Java领域中广受欢迎的对象关系映射(ORM)框架,极大地简化了数据库操作。...在学习和实践中,不断探索和理解Hibernate的查询机制,将使我们在Java开发中游刃有余。

    hibernate分页例子.rar

    本教程将通过一个具体的“hibernate分页例子”来深入理解如何在Hibernate中实现分页功能。 在实际应用中,当数据量大到一定程度时,一次性加载所有数据会导致内存压力过大,影响系统性能。因此,分页查询成为一种...

    Hibernate-HQL.rar_HQL_hibernate hql

    本篇文档将深入探讨Hibernate中的HQL(Hibernate Query Language),一种面向对象的查询语言,它提供了与SQL类似的语法,但更贴近于面向对象的思维模式,使得开发者可以更加便捷地进行数据查询。 一、HQL简介 HQL是...

    hibernate的分页

    分页可以通过设置`org.hibernate.Query.setFirstResult()`和`org.hibernate.Query.setMaxResults()`方法来实现。例如: ```java Session session = sessionFactory.openSession(); Criteria criteria = session....

    Hibernate Tutorial 09 Hibernate Query Language

    # Hibernate Query Language (HQL): An Object-Oriented Variant of SQL ## 一、引言 Hibernate 是一款流行的 Java 持久层框架,它极大地简化了对象与关系数据库之间的映射过程。Hibernate Query Language(简称 ...

    45-使用Struts + DAO + Hibernate完成分页.rar

    这个项目提供了关于如何在实际应用中集成Struts、DAO和Hibernate的实例,对于理解这些技术的协同工作以及在Java Web开发中实现分页功能具有很高的学习价值。通过深入研究和实践,开发者可以更好地掌握这些框架的用法...

    J2EE Hibernate-4.ppt

    【J2EE Hibernate-4.ppt】主要讲解了在J2EE环境中使用Hibernate框架进行数据检索的方法,特别是Criteria Query的使用。Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库...

    Hibernate 开发指南.rar

    3. 分页查询:使用Criteria或HQL的setFirstResult()和setMaxResults()方法实现。 七、其他特性 1. 支持关联:一对一、一对多、多对一、多对多的关系映射。 2. 支持继承:单表继承、联合继承和多表继承策略。 3. ...

    hibernate分页

    在Java的持久化框架Hibernate中,分页查询是一种常见的数据管理技术,用于高效地处理大量数据,避免一次性加载过多数据导致内存压力。本篇将详细阐述Hibernate中的分页实现方式及其核心概念。 一、Query与Criteria...

    Hibernate分页总结

    Hibernate查询语言(HQL)提供了与SQL类似的分页功能,不过在HQL中,分页需要配合`setFirstResult()`和`setMaxResults()`使用。 ```java String hql = "from User"; Query query = session.createQuery(hql); query....

    Hibernate HQL查询.docx

    Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性和关联等。 #### 二、HQL 的特点 1. **面向对象*...

    用户Hibernate实现的一个分页

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本教程将详细讲解如何使用Hibernate实现分页功能,这对于处理大量数据的Web...

    自己写的hibernate分页。。挺实用的

    在Hibernate中,分页主要通过Criteria API或HQL(Hibernate Query Language)来实现。首先,让我们从Criteria API开始。Criteria API允许我们动态构建查询,同时支持分页。我们可以使用`setFirstResult()`方法设置从...

    hql分页

    在IT行业中,分页是数据库查询的一个重要特性,特别是在处理大量数据时,它能有效提高系统性能并优化用户体验。HQL(Hibernate Query Language)是Hibernate框架提供的对象关系映射(ORM)查询语言,用于操作数据库...

    hibernate-release-5.0.7.Final.zip官方

    ### Hibernate 5.0.7.Final版本解析与应用指南 #### 一、概述 Hibernate 是一款开源的对象关系映射(Object-...希望这些内容能够帮助开发者更好地理解和使用 Hibernate,从而构建出高效稳定的 Java 应用程序。

    hibernate 实现分页

    总结,通过Hibernate的Criteria、HQL或JPA Query,结合`setFirstResult()`和`setMaxResults()`方法,可以轻松实现分页功能。同时,配合Javabean,我们可以方便地处理和展示查询结果。在实际开发中,根据项目需求和...

    hibernate分页(Eclipse项目)

    在Hibernate中,实现分页主要通过Query或Criteria API来完成。这两种方式都可以设置FirstResult和MaxResults参数来指定当前页的起始位置和每页的最大记录数。 【使用Query API实现分页】 1. 创建Query对象:`Query ...

    Hibernate HQL命名参数和Query接口的分页

    在Hibernate中,Query接口提供了两个方法来实现分页:`setFirstResult(int firstResult)`和`setMaxResults(int maxResults)`。 `setFirstResult(int firstResult)` 方法用来设置从哪一条记录开始获取,其参数值为...

    Hibernate hql查询

    query.setFirstResult(0).setMaxResults(10); ``` 这将获取结果集的第一页,每页10条记录。 总的来说,Hibernate的HQL和Criteria查询提供了强大的数据操作能力,它们让开发者能够专注于业务逻辑,而不是底层的SQL...

Global site tag (gtag.js) - Google Analytics