`

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。

 

 

 

 

 

分享到:
评论

相关推荐

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

    今天我们将探讨的是Hibernate的二级缓存,特别是`list`和`iterate`方法的区别,这对于优化数据库访问性能至关重要。 一级缓存是Hibernate内置的,它是Session级别的缓存,自动管理实体对象的生命周期。然而,一级...

    HQL实用技术

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

    HIBERNATE_QUERY

    ### HIBERNATE_QUERY知识点详解 ...List&lt;Cat&gt; blueCats = query.list(); ``` 以上就是关于Hibernate查询机制的相关知识点介绍,通过这些方法和技术,开发者可以根据具体的应用需求选择最合适的查询方式。

    hibernate语句大全

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

    getHibernateTemplate()有模糊查询和 分页

    List&lt;Info&gt; infos = query.list(); ``` 这段代码将获取第5页的记录,每页10条。 在给出的代码片段中,`getInfosCount()`方法用于获取所有`Info`记录的数量,这对于分页来说是必需的,因为我们需要知道总共有...

    ZendFramework中文文档

    9.6.2. List of All Constants 9.6.3. Self-Defined OUTPUT Formats with ISO 9.6.4. Self-defined OUTPUT formats using PHP's date() format specifiers 9.7. Working examples 9.7.1. Checking dates 9.7.2....

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

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

    整理的Hibernate

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

    hibernate批量删除.txt

    Iterator&lt;Customer&gt; customers = session.createQuery("from Customer c where c.age &gt; 0").iterate(); while (customers.hasNext()) { Customer customer = customers.next(); session.delete(customer); } ...

    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查询

    - `Iterator iterator = q.iterate();`遍历结果集,每条记录为一个`Object[]`数组。 3. **投影查询**: - 示例代码: ```java List&lt;Customer&gt; results = session.createQuery("select new Customer(sex, ...

    中兴通java程序员面试题(高)

    13. **Hibernate查询**:Query.list()返回结果列表,适用于一次性加载大量数据;Query.iterate()返回迭代器,适用于大数据量分批加载,减少内存占用。 14. **RESTful架构**:一种轻量级的网络架构风格,相比传统的...

    Hibernate缓存机制

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

    hibernate 二级缓存详解

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

    hibernate操作数据库笔记

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

    hibernate学习笔记

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

    jdbc基础和参考

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

    Hibernate核心接口

    Query 对象提供了许多方法来查询持久化对象,例如 list、iterate 等。Query 对象可以根据不同的条件来查询持久化对象。 Hibernate 的核心接口分别是 Configuration、SessionFactory、Session、Transaction 和 Query...

Global site tag (gtag.js) - Google Analytics