谁都知道Hibernate可以实现分页查询的功能,在以前robbin的帖子
http://www.iteye.com/topic/261也比较详细的说明过,但今天看了其中的源代码,还是不是很理解,主要是与JDBC对照而言。
Query q = session.createQuery("from Cat as c");
q.setFirstResult(20000);
q.setMaxResults(100);
List l = q.list()
if (useLimit) sql = dialect.getLimitString(sql);
PreparedStatement st = session.getBatcher().prepareQueryStatement(sql, scrollable);
实际上返回的sql语句大体机构是
select top 799990 字段名 from 表名 where 条件
所以在PreparedStatement执行的sql语句是选取前面的799990条记录给结果集ResultSet
下面的方法定义了游标是否能够移动:如果支持scrollable result,使用ResultSet的absolute方法直接移到查询起点,如果不支持的话,使用循环语句,rs.next一点点的移过去。
private void advance(final ResultSet rs, final RowSelection selection) throws SQLException {
final int firstRow = getFirstRow( selection );
if ( firstRow != 0 ) {
if ( getFactory().getSettings().isScrollableResultSetsEnabled() ) {
// we can go straight to the first required row
rs.absolute( firstRow );
}
else {
// we need to step through the rows one row at a time (slow)
for ( int m = 0; m < firstRow; m++ ) rs.next();
}
}
}
上面的方法说明了先将结果集的位置确定好,然后在用下面的方法封装获取的分页结果集封装成集合返回
final List results = new ArrayList();
for ( count = 0; count < maxRows && rs.next(); count++ ) {
if ( log.isTraceEnabled() ) log.debug("result set row: " + count);
Object result = getRowFromResultSet( rs,session,queryParameters,lockModeArray,
optionalObjectKey,hydratedObjects,keys,returnProxies
);
results.add( result );
自此Hibernate分页完成.
下面就是我的疑惑问题了:[b][/b]
1、Hibernate中的ResultSet为什么在返回结果集很大的情况下,依然能正常应用,而同样用JDBC查询同样数目的记录集可能发生OutOfMemory异常?
2、从Hibernate显示的分页语句也是取前面N(top)条语句,Hibernate是否进行过其他处理,但从Hibernate源代码上看不出特别的处理内容。
分享到:
相关推荐
综上所述,`hibernate经典分页源代码` 涉及到的技术点包括 Hibernate 的 Criteria API 和 HQL 分页,以及在 Struts 框架中使用 JSP 进行服务器端分页。通过理解并实践这些知识,开发者能够创建高效且易于维护的分页...
这包括HQL(Hibernate查询语言)和Criteria API的使用,以及如何进行关联查询、分页查询和动态查询。读者还将了解到如何处理多对一、一对多、多对多等关系映射。 在事务和缓存管理方面,书中详细阐述了Hibernate的...
Hibernate是Java环境下一个开放源代码的对象关系映射(ORM)框架,它允许开发者将Java对象映射到关系型数据库中的表,以及从数据库表中映射到Java对象。分页功能则是为了提高应用程序性能而设计的一种技术,尤其是在...
在这个"SSH分页源代码"中,我们可以深入理解如何在Java Web应用中实现数据的分页显示。 Spring框架作为整个应用的基石,提供了一个统一的入口点,管理了其他组件的生命周期和依赖关系。在分页场景中,Spring可以...
综上所述,SSH框架集成的分页源代码涉及了多个层次的交互,从用户界面的请求到数据库的查询,再到结果的封装和展示,整个过程都需要精心设计和优化。理解并熟练掌握这些知识点,对于开发高效、健壮的Java Web应用至...
本示例中的“java 分页源代码”可能是一个实现简单分页功能的Java代码示例。下面将详细介绍分页的基本概念、常见实现方式以及与Java相关的技术点。 1. 分页概念: 分页是将大量的数据分为多个部分,每次只显示一...
《精通Hibernate源代码》 Hibernate,作为Java领域中广受欢迎的对象关系映射(ORM)框架,使得开发者能够方便地在Java应用中操作数据库。通过深入理解Hibernate的源代码,开发者可以更好地掌握其工作原理,提高开发...
本项目提供了一套完整的Java分页源代码,包含与数据库交互的部分,使得开发者可以直接运行并学习。下面我们将深入探讨这个话题。 首先,分页的核心在于如何有效地将大量数据分割成小块,每次只加载一部分到内存中。...
1. **配置Hibernate**: 首先,我们需要在Spring配置文件中设置Hibernate的相关属性,包括数据源、SessionFactory和TransactionManager。 2. **定义实体类和映射**: 创建Java实体类,对应数据库中的表,并使用...
在IT行业中,分页是一种常见的数据展示...以上就是三大框架下分页源代码的解析,涵盖了从数据查询、业务逻辑到视图展示的全过程。这种分页实现方式可以应用于大部分基于Spring、Struts2和Hibernate的企业级Web应用中。
Hibernate是一个开源的对象关系映射(ORM)框架,它在Java编程中扮演着至关重要的角色,使得开发者能够以面向对象...通过深入学习其源代码和英文API,开发者能更好地理解和利用这个框架,从而提高开发效率和软件质量。
- **hibernate.cfg.xml**:这是Hibernate的核心配置文件,用于配置数据源、方言等关键信息。 ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/...
这是一个基于SSH(Struts2、Hibernate3.3和Spring2.5)框架的项目,其中包含了一个实现仿Google数字分页功能的核心源代码。在这个项目中,开发者利用这些技术来构建一个具有高效分页能力的Web应用,以提高用户体验并...
【标题】:Hibernate分页(Eclipse项目) 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作。本项目主要关注如何在使用Hibernate时实现分页功能,这对于处理大数据集的Web应用尤其...
压缩包中包含了第2章至第4章的源代码,这些章节通常会涵盖Hibernate的基础概念、配置、实体映射、查询语言以及事务管理等核心内容。 在第二章中,作者可能会详细讲解Hibernate的核心概念,包括ORM(对象关系映射)...
PagingUtil.war很可能是整个分页应用的打包文件,包含了所有源代码、配置文件、库依赖等,用户可以直接部署并运行。 综上所述,这个项目提供了一个整合了Hibernate、MySQL、Struts2的分页工具示例,通过研究源码和...
### JSP分页源代码详解 #### 分页逻辑解析 在提供的代码片段中,可以看到一个名为`query`的公共方法,该方法接收一个`DTOBean`类型的参数`dto`,并执行一系列操作来实现分页查询。下面是对这段代码关键部分的详细...
在这个“人员管理分页源代码CRUD”项目中,开发者使用JSF来实现一个基本的人力资源管理系统,包括创建(Create),读取(Retrieve),更新(Update)和删除(Delete)功能,并且具备了分页功能,使得数据浏览更加高效。...
- 数据源适配器:根据不同的数据库实现具体的分页查询逻辑。 - 分页结果:封装查询结果和分页信息,如总记录数、总页数等。 5. **最佳实践**: - 避免一次性加载大量数据,以免内存溢出。 - 在前端处理分页时,...
根据提供的文件信息,我们可以分析出该段代码是用于实现基于Java技术的Web应用程序中的分页功能。虽然这里的代码示例采用的是ASP.NET的语法结构,但我们可以从中抽取出与Java分页相关的概念和技术要点,并结合Java...