query.list 和 query.iterate 之间的区别

2024-03-23

使用之间到底有什么区别Query.list() http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#list%28%29 and Query.iterator() http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#iterate%28%29?

使用其中任何一个是否有任何性能增强。我的意思是他们中的任何一个都在实施延迟加载 http://en.wikipedia.org/wiki/Lazy_loading ?

Or is 查询.迭代器() http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#iterate%28%29最终与query.list().iterate()

还有为什么没有Criteria.iterator()Criteria.list() http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Criteria.html#list%28%29


查询.list():执行 1 个 SQL 查询并加载整个数据。即使记录存在于缓存中,也会执行新的 SQL 查询以从数据库加载记录。

List<Employee> list1 = session.createQuery("from Employee").list(); // SELECT *FROM EMP
for (Employee e : list1) {
    System.out.println(e);
}
List<Employee> list2 = session.createQuery("from Employee").list(); // SELECT *FROM EMP
for (Employee e : list2) {
    System.out.println(e);
}

查询.迭代():执行 1+N 个 SQL 查询。第一个查询仅返回所有记录的标识符,并且当返回的迭代器被迭代时,每次执行包含 WHERE 子句(如“WHERE id=N”)的单独 SQL 查询时。如果记录存在于缓存中,则执行第一个查询,不执行其余 N 个查询,并从缓存中获取记录。

Iterator<Employee> iterator1 = session.createQuery("from Employee").iterate(); // SELECT EMP_ID FROM EMP
while(iterator1.hasNext()) {
    System.out.println(iterator1.next()); // SELECT * FROM EMP WHERE EMP_ID=?
}
Iterator<Employee> iterator2 = session.createQuery("from Employee").iterate(); // SELECT EMP_ID FROM EMP
while (iterator2.hasNext()) {
    System.out.println(iterator2.next()); // From cache, no SQL
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

query.list 和 query.iterate 之间的区别 的相关文章

随机推荐