`

hibernate的query.scroll()和query.setFirstResult(),query.setMaxResults();

 
阅读更多

一、hibernate的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。

 

三 JDBC2.0

在JDBC1.0中,光标只能利用next方法向前移动一条记录,在2.0中,增加了可滚动结果集,使其可以任意跳转。
next()下一条,true/false
previous()前一条,true/false
first()第一条true/false
last()最后一条true/false
beforeFirst()第一条之前true/false
afterLast()最后一行后面true/false
absolute(int num)移动到指定行,若指定为负数,则从最后一行向前移动。
Relative( int relativeRowNumber)移动到当前行的相对行,参数可以为负数,指当前行之前的行。
在使用可滚动结果集方法移动时,如果不清楚当前位置,可以使用如下方法:
getRow()返回当前行,若无,则0
isfirst()true/false
isLast() true/false
isBeforeFirst() true/false
isAfterLast() true/false

 

 

 

Statement对象创建的常见用法
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
结果集类型决定这个Statement对象创建的Rs对象是否可以滚动,是否对数据库中的修改敏感。
ResultSet.TYPE_FORWORD_ONLY(默认值),结果集的游标只能向下滚动。
ResultSet.TYPE_SCROLL_INSENSITIVE(可滚动,不敏感)结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
ResultSet.TYPE_SCROLL_SENSITIVE(可滚动,敏感)返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
结果集并发性决定Rs是否可以修改数据库中的行。
ResultSet.CONCUR_READ_ONLY(不可修改默认) 不能用结果集更新数据库中的表
ResultSet.CONCUR_UPDATABLE(可以修改) 能用结果集更新数据库中的表

 

分享到:
评论

相关推荐

    Hibernate中的query 分页.doc

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

    hibernate分页

    Hibernate提供了SQL风格的Query接口,可以通过setFirstResult()和setMaxResults()方法实现分页。setFirstResult()设置从哪一条记录开始,setMaxResults()指定最多返回多少条记录。例如: ```java Session ...

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

    这里,`setFirstResult()` 和 `setMaxResults()` 分别用于指定查询的起始位置(基于0)和每页的记录数。 如果你更倾向于使用HQL,可以这样实现: ```java Query query = session.createQuery("from User"); query....

    hibernate 实现分页

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

    hibernate分页技术

    1. **Query接口的setFirstResult和setMaxResults方法** 这是实现分页最常用的方式。`setFirstResult(int firstResult)`设置从第几个结果开始获取,相当于SQL中的OFFSET;`setMaxResults(int maxResults)`设置最多...

    Hibernate-HQL.rar_HQL_hibernate hql

    4. 分页查询:使用setFirstResult和setMaxResults方法实现分页,如“query.setFirstResult(0).setMaxResults(10)”。 5. 参数化查询:避免SQL注入,提高代码复用,如“SELECT u FROM User u WHERE u.name=:name”,...

    hibernate分页查询

    3. 设置分页参数:`query.setFirstResult(pageIndex * pageSize).setMaxResults(pageSize);` 4. 执行查询并获取结果:`List<Object> results = query.list();` 四、使用ScrollableResults进行高效分页 对于大数据量...

    hibernate分页查询 数据库连接

    在Hibernate中,实现分页查询通常涉及到`setFirstResult()`和`setMaxResults()`两个方法。 `setFirstResult(int start)`方法用于设置从数据库中开始获取结果集的位置,这个位置是基于0的索引,所以如果你想要获取第...

    hibernate经典分页源代码

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

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    Hibernate提供了多种方式来实现分页,其中一种常见方法是通过`Session`对象的`createCriteria()`方法创建查询标准,然后调用`setFirstResult()`和`setMaxResults()`来限制结果集的范围。然而,在某些情况下,这种...

    在JDBC,hibernate中实现分页

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

    Hibernate持久化映射一对多和多对一

    本文将深入探讨Hibernate中的两个重要概念:一对多(One-to-Many)和多对一(Many-to-One)的持久化映射。 ### 一对多映射 **定义**: 一对多映射表示一个实体(如部门)可以关联多个实体(如员工)。在数据库层面...

    Hibernate 框架测试版本

    此外,`Query`和`Criteria`对象可以使用`setFirstResult()`和`setMaxResults()`进行分页,`scroll()`方法用于迭代查询结果。 通过这个“Hibernate 框架测试版本”,你可以动手实践上述知识点,理解并掌握Hibernate...

    Hibernate 多表连接分页查询示范项目

    5. **设置分页**:调用 setFirstResult() 和 setMaxResults() 方法设定分页参数。 6. **执行查询**:调用 list() 或 scroll() 方法执行查询,获取结果集。 7. **处理结果**:遍历查询结果,将数据绑定到视图或者...

Global site tag (gtag.js) - Google Analytics