`

hibernate-Query.list()与Query.iterate()比较

 
阅读更多


而iterate 方法,则是首先通过一条Select SQL 获取所有符合查询条件的记录的id,再对这个id 集合进行循环操作,通过单独的Select SQL 取出每个id 所对应的记录,之后填入POJO中返回。
也就是说,对于list 操作,需要一条SQL 完成。而对于iterate 操作,需要n+1条SQL。
看上去iterate方法似乎有些多余,但在不同的情况下确依然有其独特的功效,如对海量数据的查询,如果用list方法将结果集一次取出,内存的开销可能无法承受。
另一方面,对于我们现在的Cache机制而言,list方法将不会从Cache中读取数据,它总是一次性从数据库中直接读出所有符合条件的记录。而iterate 方法因为每次根据id获取数据,这样的实现机制也就为从Cache读取数据提供了可能,hibernate首先会根据这个id 在本地Cache 内寻找对应的数据,如果没找到,再去数据库中检索。

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

4: list()中返回的List中每个对象都是原本的对象, iterate()中返回的对象是代理对象.(debug可以发现)
分享到:
评论

相关推荐

    HIBERNATE_QUERY

    ### HIBERNATE_QUERY知识点详解 #### 一、概述 Hibernate作为一款强大的对象关系映射(ORM)框架,为Java开发者提供了一套高效且简洁的方式来处理数据库操作。它支持多种查询方式,包括面向对象的查询语言(HQL)...

    day37 04-Hibernate二级缓存:list和iterate方法比较

    2. `iterate`方法:与`list`不同,`iterate`方法按需加载数据,它返回一个迭代器,每次调用`next()`方法时才会从数据库中获取一条记录。这种方式降低了内存消耗,尤其适合处理大量数据。但缺点是需要更多的数据库...

    hibernate批量删除.txt

    本文将详细介绍如何通过Hibernate进行批量删除,并探讨其背后的工作原理与优化技巧。 #### 二、批量删除的基本方法 1. **基本思路**:批量删除可以通过执行一次或多条SQL语句来完成。通常情况下,为了提高效率,...

    hibernate语句大全

    List<Customer> customers = query.list(); ``` ##### 4. QBC方式(Query By Criteria) - **定义**:QBC是Hibernate提供的另一种查询方式,基于标准的Java API,提供了更多的灵活性。 - **应用场景**:构建复杂...

    hibernate学习笔记

    `单端代理的批量抓取.PNG` 可能讲解了如何通过Hibernate的批处理技术提高性能,如设置批处理大小,利用Session的flush模式,以及Query的iterate()和list()方法的区别。批量操作可以减少数据库交互次数,提升应用性能...

    使用Hibernate缓存数据.ppt

    - **操作行为**:当调用Session的`get()`、`load()`、`save()`、`update()`、`saveOrUpdate()`、`Query`或`Criteria`的`list()`、`iterate()`等方法时,Hibernate会自动处理一级缓存。 - **查询示例**:在同一个...

    马士兵hibernate学习笔记(原版)

    - 区别使用`list()`与`iterate()`方法遍历查询结果集。 - 理解一级缓存、二级缓存与查询缓存的区别及使用场景。 - 事务并发处理的最佳实践。 以上知识点覆盖了从入门到进阶的各个方面,为学习Hibernate提供了...

    Hibernate教程24_Hibernate的补充_list与iterator

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

    struts+hibernate查询所有记录

    List<Role> list = query.list(); session.close(); return list; } } ``` 3. **Struts配置** - 在`struts-config.xml`中定义Action映射和结果页面。 - 使用Struts标签库进行页面逻辑控制和数据展示。 ...

    HQL实用技术

    5. **返回List集合**:Query.list() 返回List集合,Query.iterate() 返回Iterator。 - **Query.list()** 和 **Query.iterate()** 的主要区别在于返回类型和查询策略: - **Query.list()** 直接查询数据库,并将...

    hibernate 二级缓存详解

    Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...

    Hibernate缓存机制

    - 执行`save()`、`update()`、`saveOrUpdate()`等操作时,如果使用`load()`、`get()`、`list()`、`iterate()`等方法,则可能会触发缓存的刷新。 - 在调用`flush()`方法时,会将Session内的状态同步到数据库,并且...

    hibernate查询

    2. **Hibernate Query Language (HQL)** - **标准查询**: - `String sql = "from Customer as customer where customer.age = 20";` - `Query q = session.createQuery(sql);` - **选择特定字段**: - `String...

    hibernate操作数据库笔记

    一.使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化... (7).createQuery(String HQL).list()/iterate()/uniqueResult(); //HQL(Hibernate Query Language)语句查询

    hibernate对二级缓存的理解

    同时,若要启用查询缓存,还需设置`hibernate.cache.use_query_cache=true`。 二级缓存的工作原理可以简单地理解为一个Map,其中Key代表对象的ID,Value则是对应的POJO对象。无论是通过list、load还是iterate操作,...

    Hibernate二级缓存攻略

    同时,如果要开启查询缓存,还需设置`hibernate.cache.use_query_cache=true`。 在二级缓存中,数据以Map的形式存储,Key通常为对象的ID,Value为对象实例。对于Class级别的缓存,当我们通过ID获取对象时,会首先...

    HIbernate缓存

    <property name="hibernate.cache.use_query_cache">true ``` 这里我们使用EhCache作为缓存实现。需要注意的是,在不同的Hibernate版本中,EhCache的包名可能有所不同。例如,在2.1版本中使用`...

    在Java的Hibernate框架中使用SQL语句的简单介绍

    Iterator iter = query.iterate(); while(iter.hasNext()){ Object[] objs = (Object[])iter.next(); for (int i = 0; i < objs.length; i++) { System.out.print(objs[i]); } System.out.println(); } ``` ...

    getHibernateTemplate()有模糊查询和 分页

    `getHibernateTemplate()`是Spring框架与Hibernate集成时提供的一个便捷方法,它封装了对Hibernate Session的操作,使得在Service或DAO层进行数据库交互变得更加简单。 在给定的标题和描述中,提到的是`...

Global site tag (gtag.js) - Google Analytics