`

Hibernate:Query.list 与 Query.iterate 的区别

阅读更多
list: 结果存入缓存,但不从缓存里面取;查询时属性连同id一起找出来,只有“一句”select;
  iterate:结果存入缓存,并在缓存中查找结果;查询时先找出所有的 id,然后根据 id 到缓存里面查找,如果没有命中,再到数据库中查找该id对应的其他属性。可能会有多行 select。

分页:firstResult 与 maxResult 的影响。
Oracle:支持 rownum <= ? 的写法,因此在返回的结果集大小上对 list 和 iterate 都是一样的。但 maxResult 比较大时对使用 list 较为有利(不考虑缓存),因为 iterate 是要按 id 进行多次查找的。
    对于不支持部分结果集的数据库,必须返回所有结果(?)。这个时候,list 可能会消耗大量的内存并导致效率降低。iterate 因为只是 返回所有id,相对较好。
    不过如果是大数据量的应用,应该还是要用支持部分结果集的数据库。

如果使用二级缓存且缓存命中率较高(数据经常使用,并且较少更新),此时可以使用 iterate。
分享到:
评论

相关推荐

    HIBERNATE_QUERY

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

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

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

    hibernate批量删除.txt

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

    HQL实用技术

    - **Query.list()** 和 **Query.iterate()** 的主要区别在于返回类型和查询策略: - **Query.list()** 直接查询数据库,并将结果存储在内存中,适合数据量较小的情况。 - **Query.iterate()** 则会先获取ID列表,...

    hibernate语句大全

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

    使用Hibernate缓存数据.ppt

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

    jdbc基础和参考

    Query 1.查询对象,HQL Criteria 1.hibernate提供的更面向对象的一种查询方式。 准备工作: 1.java中的POJO对象存在 2.数据库,表得存在 3.hibernate的配置文件(hibernate.cfg.xml)得存在 4.POJO.hbm.xml文件存在...

    Hibernate教程24_Hibernate的补充_list与iterator

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

    struts+hibernate查询所有记录

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

    hibernate操作数据库笔记

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

    hibernate 二级缓存详解

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

    整理的Hibernate

    2. **数据加载**:`query.list()`默认会加载所有数据到内存,而`query.iterate()`则只会加载主键,后续需要时才会按需加载具体数据。`lazy="false"`表示实体加载时不启用懒加载,即立即加载所有关联数据。 3. **...

    Hibernate方法总结

    在Java持久化框架Hibernate中,HibernateTemplate是一个便捷的工具类,它封装了常见的数据库操作,使得开发者能够更方便地与数据库交互。以下是对标题和描述中提到的HibernateTemplate方法的详细总结: A. `get` 和...

    getHibernateTemplate()有模糊查询和 分页

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

    hibernate学习笔记

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

    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缓存

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

Global site tag (gtag.js) - Google Analytics