gpt4 book ai didi

java - query.list 和 query.iterate 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:33 26 4
gpt4 key购买 nike

使用 Query.list() 到底有什么区别?和 Query.iterator()

使用其中任何一个是否有任何性能增强。我的意思是他们中的任何一个都在实现 lazy loading

或者是Query.iterator()最终与 query.list().iterate()

相同

还有为什么没有 Criteria.iterator() 只有 Criteria.list()

最佳答案

Query.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);
}

Query.iterate(): 执行 1+N 个 SQL 查询。第一个查询只返回所有记录的标识符,当返回的迭代器被迭代时,每次执行一个单独的 SQL 查询,其中包含一个 WHERE 子句,如“WHERE id=N”。如果缓存中存在记录,则执行第一个查询,不执行其余 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
}

关于java - query.list 和 query.iterate 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14957220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com