`
peizhiinfo
  • 浏览: 1436845 次
文章分类
社区版块
存档分类
最新评论

Hibernate : Query.list()、Query.iterator()的区别

 
阅读更多

Query上有list()与iterator()方法,两者的差别在于list()方法在读取数据时,并不会利用到快取,而是直接再向数据库查询,而iterator()则将读取到的数据写到快取,并于读取时再次利用。

来看看下面的程序:

Session session = sessionFactory.openSession();

Query query = session.createQuery("from User");
List users = query.list();
users = query.list();

session.close();


这个程序片段会使用两次SQL来查询数据库:

Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_
Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_


如果在Session关闭之前,要再将所有数据在取出,可以使用iterator()方法,例如:

Session session = sessionFactory.openSession();

Query query = session.createQuery("from User");
Iterator users = query.iterate();
users = query.iterate();

session.close();


这个程序片段会使用一次SQL向数据库查询,第二次则直接从快取中取得数据:

Hibernate: select user0_.id as col_0_0_ from user user0_


由于使用iterator()方法时会使用到Session level快取,所以在查询大量数据时,会耗用大量的内存,必要时可以使用Session的evict()或clear()方法来清除快取

分享到:
评论

相关推荐

    Hibernate中的query 分页.doc

    Hibernate中的query 博客分类: • Hibernate HibernateSQLSQL ServerMySQLJDBC Hibernate中的query.setFirstResult(),query.setMaxResults(); 一、query.scroll()和query.setFirstResult(),query....

    java-util-iterator.pdf java-util-iterator.pdf

    java-util-iterator.pdfjava-util-iterator.pdfjava-util-iterator.pdf

    hibernate二级缓存

    Hibernate二级缓存 在一个数据库系统中,如果缓存设置的... hibernate.cache.use_query_cache必须配置,如果想缓存使用findall()、list()、Iterator()、createCriteria()、 createQuery()等方法获得的数据结果集。

    java.util.ConcurrentModificationException 异常问题详解1

    Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ Integer integer = iterator.next(); if(integer==2) list.remove(integer); } } } ``` 这个示例代码尝试在遍历 ArrayList 时...

    s:iterator 用法.pdf

    。。。

    s:iterator 用法.docx

    。。。

    1、hibernate 简单语法1

    Hibernate 提供了多种方式来处理结果集,例如使用 `list()` 方法获取整个结果集,或者使用 `Iterator` 迭代器来逐个处理结果集。例如: ```java Query query = session.createQuery("from Student"); List<Student> ...

    11-Iterator.rar

    Iterator.rarIterator.rarIterator.rarIterator.rarIterator.rar迭代器设计模式

    Struts迭代器(iterator)遍历List常用的4种例子

    相反,显示的数据表格行和列不确定,此时用实体类(UserEntity)迭代的方式很难实现,只能用List或List<List<String>>实现了。 运行效果及代码解释请参考我的博客园:...

    CUJ:标准库:定义iterator和const iterator.docx

    CUJ:标准库:定义iterator和const iterator

    Hibernate教程24_Hibernate的补充_list与iterator

    http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码

    java遍历特例

    Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); Object value = entry.getValue(); } Map map =...

    java.util.ConcurrentModificationException 解决方法

    在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。 则使用会报以下异常: Java.util.ConcurrentModificationException at java.util.HashMap$...

    jsp自定义标签iterator遍历list[整理].pdf

    JSP 自定义标签 Iterator 遍历 List 本文主要介绍了在 JSP 中使用自定义标签 Iterator 遍历 List,并对标签的实现过程进行了详细的解释。 标签的概念和作用 在 JSP 中,标签是一种特殊的组件,它可以根据需要执行...

    C#设计模式_设计模式_C#_

    迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式...

    23种设计模式 (创建型,结构型,行为型)

    迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) ...

    迭代器Iterator.txt

    迭代器Iterator.txt 迭代器Iterator.txt迭代器Iterator.txt

    浅谈Java中的Set、List、Map的区别.docx

    Java 中的 Set、List、Map 的区别 Java 中的集合可以存储和操作数目不固定的一组数据。所有的 Java 集合都位于 java.util 包中!Java 集合只能存放引用类型的数据,不能存放基本数据类型。 Collection 接口是最...

    C#设计模式(23种设计模式)

    迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) ...

    软件体系结构设计模式ppt课件.ppt

    * Iterator * Mediator * Memento * Observer * Strategy * State * TemplateMethod * Visitor 具体的设计模式包括: 1. 工厂方法 2. 抽象工厂 3. 建造模式 4. 单例/单子模式 5. 类的适配器模式 6. 对象的...

Global site tag (gtag.js) - Google Analytics