setFirstResult 是起始数据,setMaxResults是查询显示的数据。
如果放在分页程序里边 setFirstResult的值应该是 (当前页面-1)X每页条数,setMaxResults 就是每页的条数了。
一、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.scroll()`和使用`query.setFirstResult(), query.setMaxResults()`。 首先,`query.scroll()`方法基于JDBC 2.0的可滚动结果集实现。这种方式允许应用程序在结果...
在Hibernate中,我们可以使用`Criteria`、`HQL`(Hibernate Query Language)或`Query` API来实现分页。 1. **Criteria API 分页**: Hibernate的`Criteria` API提供了动态构建查询的灵活性。要实现分页,我们需要...
分页可以通过设置`org.hibernate.Query.setFirstResult()`和`org.hibernate.Query.setMaxResults()`方法来实现。例如: ```java Session session = sessionFactory.openSession(); Criteria criteria = session....
1. Hibernate的Query和Criteria API都提供了分页功能。使用`setFirstResult()`方法设置查询开始的位置,即第几条记录,以及`setMaxResults()`方法设置一次返回的最大记录数,这两者结合即可实现分页。 2. Query API...
在Hibernate中,实现分页主要通过Query或Criteria API来完成。这两种方式都可以设置FirstResult和MaxResults参数来指定当前页的起始位置和每页的最大记录数。 【使用Query API实现分页】 1. 创建Query对象:`Query ...
在Hibernate中,可以通过设置`setFirstResult`和`setMaxResults`来实现分页查询: ```java final String hql = "from User"; final Query q = s.createQuery(hql); q.setFirstResult(0); // 从第0条记录开始 q....
3. **编写分页方法**:在Action类中,创建一个方法如`execute()`,在该方法内调用Hibernate的分页查询代码,然后将结果集封装到一个模型对象(如`UserPaginationModel`)中。 4. **配置Struts2的配置文件**:在`...
在分页场景中,Hibernate可以通过HQL(Hibernate Query Language)或Criteria API来实现分页查询,例如: ```java Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria...
Hibernate查询语言(HQL)提供了与SQL类似的分页功能,不过在HQL中,分页需要配合`setFirstResult()`和`setMaxResults()`使用。 ```java String hql = "from User"; Query query = session.createQuery(hql); query....
在Hibernate中,我们可以使用Criteria API或HQL(Hibernate Query Language)来实现分页。 1. Criteria API 分页: Hibernate的Criteria API提供了一种面向对象的方式来执行数据库查询。实现分页查询,我们需要...
在回调方法`doInHibernate`中,通过`createQuery()`创建Query对象,然后使用`setFirstResult()`设置起始位置(即偏移量),`setMaxResults()`设置每页条目数量,最后执行`list()`获取结果集。 2. `findByPage...
在Hibernate中,分页主要通过Criteria API或HQL(Hibernate Query Language)来实现。首先,让我们从Criteria API开始。Criteria API允许我们动态构建查询,同时支持分页。我们可以使用`setFirstResult()`方法设置从...
Hibernate提供了SQL风格的Query接口,可以通过setFirstResult()和setMaxResults()方法实现分页。setFirstResult()设置从哪一条记录开始,setMaxResults()指定最多返回多少条记录。例如: ```java Session ...
在Hibernate中,实现假分页通常借助于Criteria API或者HQL(Hibernate Query Language)来进行。以下是一个使用Criteria API的示例: ```java Session session = sessionFactory.openSession(); Criteria criteria ...
### Hibernate 实现分页查询详解 #### 一、引言 在进行数据库操作时,为了提高用户体验和系统性能,分页查询是一项非常重要的技术。Hibernate作为Java领域内一个优秀的对象关系映射(ORM)框架,提供了强大的数据...
query.setFirstResult(0).setMaxResults(10); // 第一页,每页10条 // Criteria criteria.setFirstResult(0).setMaxResults(10); ``` 6. **排序查询** 可以通过`setOrder`或`addOrder`方法对查询结果进行...
3. 设置分页参数:`query.setFirstResult(pageIndex * pageSize).setMaxResults(pageSize);` 4. 执行查询并获取结果:`List<Object> results = query.list();` 四、使用ScrollableResults进行高效分页 对于大数据量...
在执行分页查询时,`setFirstResult`和`setMaxResults`方法会添加到生成的SQL中,对应LIMIT和OFFSET子句。 4. **性能优化** 为了提高效率,可以使用缓存技术,如二级缓存,来存储已经计算过的总数,避免重复执行...
4. 分页查询:使用setFirstResult和setMaxResults方法实现分页,如“query.setFirstResult(0).setMaxResults(10)”。 5. 参数化查询:避免SQL注入,提高代码复用,如“SELECT u FROM User u WHERE u.name=:name”,...
总结,通过Hibernate的Criteria、HQL或JPA Query,结合`setFirstResult()`和`setMaxResults()`方法,可以轻松实现分页功能。同时,配合Javabean,我们可以方便地处理和展示查询结果。在实际开发中,根据项目需求和...