在使用query进行查询的时候,通过HQL获得的Query对象,我们要先进行list()或者iterate()方法,之后在用list和iterator里对应的
方法进行输出,但是他们有什么区别呢?下面分别用list和iterate方法进行一下试验:
Query q = s.createQuery("from Manager");
List<Manager> managers = q.list();
for(Manager mt : managers){
System.out.println(mt.getManagerName());
}*/
Query q = s.createQuery("from Manager");
Iterator<Manager> mi = q.iterate();
while(mi.hasNext()){
m = mi.next();
System.out.println(m.getManagerName());
}
iterate结果:
list结果:
1、采用list方法,会直接查询数据库,将所有对象全部取入缓存,而采用iterate方法,会先将对象的主键取入缓存,当用到的时候先
到缓存中找,如果有符合的主键则找到,如果没有找到则再向数据库发出sql语句。
2、list只查一级缓存,而iterate会查询二级缓存。
3、list返回的是实体对象,而iterate返回的是代理对象。