Hibernate中的query.setFirstResult(),query.setMaxResults();

原创 2008年10月23日 09:11:00

一、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的四种状态

纸上得来终觉浅 开始学习Hibernate对象的四种状态,花了一上午的时间来思考: 1.为什么要对Hibernate的对象分为几种状态: 状态是对对象所处所处情境的描述,在对hibernate定义了几...
  • Jintao_Ma
  • Jintao_Ma
  • 2016年04月20日 15:56
  • 4565

Hibernate中get方法和load方法的区别

一、get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实...
  • flqljh
  • flqljh
  • 2015年11月14日 10:56
  • 4098

Hibernate中的核心接口query接口用法

Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句。 Query接口的用法: 通过SessionFactory获得了se...
  • tuke_tuke
  • tuke_tuke
  • 2015年11月09日 21:45
  • 4320

Hibernate中的query.setFirstResult(),query.setMaxResults();

一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2013年11月11日 20:35
  • 808

Hibernate的query.setFirstResult(),query.setMaxResults()分页

一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两...
  • wang_tao219
  • wang_tao219
  • 2013年11月12日 11:28
  • 489

Hibernate中的query.setFirstResult(),query.setMaxResults()

一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两...
  • u010635488
  • u010635488
  • 2014年10月17日 10:13
  • 276

HQL(Hibernate Query Language):

  • 2011年08月15日 23:02
  • 660KB
  • 下载

Hibernate Query Language基础使用详解

  • 2010年10月12日 12:01
  • 309KB
  • 下载

hibernate sql query.pdf

  • 2012年10月28日 11:43
  • 661KB
  • 下载

\Hibernate_query条件查询

  • 2008年11月06日 12:04
  • 982KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate中的query.setFirstResult(),query.setMaxResults();
举报原因:
原因补充:

(最多只允许输入30个字)