`

Hibernate中List与iterator

 
阅读更多
Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,
1:返回的类型不一样,list()返回List, iterate()返回Iterator,
2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1。

3:iterate会查询2级缓存, list只会查询一级缓存。
4: list()中返回的List中每个对象都是原本的对象, iterate()中返回的对象是代理对象.(debug可以发现)



list()方法在执行时,直接运行查询结果所需要的查询语句。
iterator()方法则是先执行得到对象ID的查询,然后在根据每个ID值去取得所要查询的对象。
因此:对于list()方式的查询通常只会执行一个SQL语句,而对于iterator()方法的查询则可能需要执行N+1条SQL语句(N为结果集中的记录数).
结果集的处理方法不同:
list()方法会一次取出所有的结果集对象,而且他会依据查询的结果初始化所有的结果集对象。如果在结果集非常庞大的时候会占据非常多的内存,甚至会造成内存溢出的情况发生。
iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。一次在访问中可以控制缓存中对象的数量,以避免占用过多的缓存,导致内存溢出情况的发生。
分享到:
评论

相关推荐

    Hibernate教程24_Hibernate的补充_list与iterator

    【标题】"Hibernate教程24_Hibernate的补充_list与iterator" 在Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。本教程将重点讲解在使用Hibernate时,如何处理查询结果集合...

    hibernate难点重点笔记

    《Hibernate难点解析与...理解并灵活运用uuid、get()与load()以及iterator()和list()的区别,是每个Hibernate开发者必备的技能。通过深入学习这些难点,开发者能够更好地驾驭Hibernate,从而提升项目的稳定性和性能。

    hibernate criteria 分组 排序 关联

    ### Hibernate Criteria 分组、排序与关联查询详解 #### 标题与描述理解 - **标题**:“hibernate criteria 分组 ...以上就是关于Hibernate Criteria API中的分组、排序与关联查询的相关知识点,希望对你有所帮助。

    在Hibernate中处理批量更新和批量删除

    在IT领域,尤其是在Java开发与数据库交互的过程中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了诸多便利。然而,在处理大量数据时,如何有效地进行批量更新和批量删除操作,是每一个开发者都...

    使用hibernate封装方法

    在Java Web开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。Struts是MVC(模型-视图-控制器)框架,用于处理HTTP请求,而JSP(JavaServer Pages)则用于创建动态网页。...

    java Hibernate ireport jsperreport 制作报表

    Java平台提供了多种工具来实现报表制作,其中iReport和JasperReport是非常流行的选择,它们可以与ORM框架Hibernate进行整合,实现动态数据源的报表生成。 1. **iReport与JasperReport** iReport是一款基于Java的...

    hibernate_third项目源码

    通过深入理解和实践这些源码,开发者可以更好地掌握Hibernate在实际开发中的应用。 Hibernate是一款强大的Java持久化框架,它简化了数据库操作,将对象与关系数据库之间的映射(ORM)工作自动化。在这个项目中,...

    优化Hibernate性能的几点建议

    例如,如果设置了`default-cascade="all"`,那么在保存或更新一个实体时,Hibernate会自动更新与该实体相关的所有关联对象的状态。这样不仅可以简化代码,还可以确保数据的一致性。 #### 七、监控并调整Hibernate的...

    jdbc和hibernate的区别

    3. **数据状态**:JDBC操作的数据是瞬时的,数据库与内存中的数据可能不一致,而Hibernate提供了一种对象-关系映射机制,使得数据具有持久性,能够保持数据库与对象的一致性。 **性能比较:** 1. **创建操作**:...

    hibernate 调优

    然而,在实际应用中,为了确保应用的高性能与响应速度,进行合理的 Hibernate 调优是非常必要的。本文将根据提供的文件内容,详细介绍 Hibernate 性能调优的关键点,并深入探讨每个方面。 #### 二、数据库设计调整 ...

    hibernate中文api开发文档

    4. **Query 和 Criteria**: Query和Criteria接口分别用于HQL和Criteria查询,返回结果集可以是List、Iterator或单一对象。 5. **Criteria API**: Criteria API提供了一种更加动态的查询方式,允许在运行时构建查询...

    hibernate源码分析过程

    Hibernate 是一个基于 Java 的 ORM(Object-Relation Mapping)框架,允许开发者使用面向对象的方式与关系数据库交互。在本文中,我们将对 Hibernate 的源码进行深入分析,并探讨其核心特性和技术实现。 架构 ...

    Hibernate数据检索(HQL)笔记

    本文档基于魔乐科技李兴华老师的 Hibernate 教程笔记进行整理与扩展,主要介绍了 Hibernate 的数据检索方法,特别是 HQL(Hibernate Query Language)的使用技巧。 #### 二、HQL 基础 HQL 是一种面向对象的查询语言...

    Hibernate笔记

    在Hibernate中,所有的数据库操作都应当在一个事务的上下文中执行。 4. **Query**: 用于执行HQL(Hibernate Query Language)或原生SQL查询。 5. **Lazy Loading**: 惰性加载机制,用于延迟加载关联对象。只有当真正...

    hibernate中的几个重要方法以及调用[参照].pdf

    本文将深入探讨Hibernate中的一些重要方法及其调用,包括get()、load()、list()、iterator()以及HQL查询的相关知识点。 1. get()与load()方法: - get()方法:当尝试获取一个对象时,get()首先会在一级缓存中查找...

    Hibernate入门文档

    Hibernate 难点解析: hibernate中uuid和native的相关总结 ...hibernate二级缓存中list和iterator的用法 Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别

    web小项目初步整合hibernate

    9. **结果集处理**:查询结果通常返回`List`或`Iterator`,可以遍历并转换为自定义的Java对象。 在这个项目中,描述提到了使用Servlet,Servlet是Java Web应用中的核心组件,负责处理HTTP请求和响应。结合Hibernate...

    struts2整合hibernate

    在JSP中,可以通过Struts2的标签库(例如`s:iterator`)遍历并显示这些数据。 8. **错误和异常处理**:整合过程中可能会遇到各种错误和异常,例如SQL异常、空指针异常等。合理地捕获和处理这些异常,提供友好的错误...

    HIBERNATE_QUERY

    Hibernate还提供了对结果集处理的支持,包括如何从查询结果中提取数据并转换为对象。 - **单个对象查询**:当查询预期只返回一条记录时,可以使用`uniqueResult()`方法。 ```java Cat mother = (Cat) session....

    hibernate语句大全

    Hibernate是一个开源的对象关系映射(ORM)框架,它能够将Java对象映射到数据库表中,并管理这些对象的生命周期。本篇文章主要介绍初学者在学习Hibernate时会遇到的基础语句,通过简单的示例帮助读者快速上手并理解...

Global site tag (gtag.js) - Google Analytics