Hibernate中list()和iterate()的区别

1 篇文章 0 订阅
1 篇文章 0 订阅
使用list()方法获取查询结果,每次发出一条查询语句,获取全部数据
使用iterate()方法获取查询结果,先发出一条SQL 语句用来查询满足条件数据的id,然后依次按这些id 查询记录,也就是要执行N+1 条SQL 语句(N 为符合条件的记录数)

sessionFactory = new Configuration().configure().buildSessionFactory();

session = sessionFactory.openSession();

Query query = session.createQuery("from House as h ");

System.out.println("使用iterate()方法查询数据");

Iterator<House> it = query.iterate();

while(it.hasNext()){

House house = it.next();

System.out.println("标题:"+house.getTitle());

}

System.out.println("-------------------");

System.out.println("使用list()方法查询数据");

List<House> result = query.list();

for(House house:result){

System.out.println("标题:"+house.getTitle());

}

雪迪网

 

 

 

 

sessionFactory = new Configuration().configure().buildSessionFactory();

session = sessionFactory.openSession();

Query query = session.createQuery("from House as h ");

System.out.println("使用list()方法查询数据");

List<House> result = query.list();

for(House house:result){

System.out.println("标题:"+house.getTitle());

}

System.out.println("-------------------");

System.out.println("使用iterate()方法查询数据");

Iterator<House> it = query.iterate();

while(it.hasNext()){

House house = it.next();

System.out.println("标题:"+house.getTitle());

}

 

雪迪网

 

 

sessionFactory = new Configuration().configure().buildSessionFactory();

session = sessionFactory.openSession();

Query query = session.createQuery("from House as h ");

System.out.println("使用list()方法查询数据");

List result1 = query.list();

for(int i=0;i<result1.size();i++){

House house = (House)result1.get(i);

System.out.println("标题:"+house.getTitle());

}

System.out.println("----------------------");

System.out.println("再一次执行list()方法");

List result2 = query.list();

for(int i=0;i<result2.size();i++){

House house = (House)result2.get(i);

System.out.println("标题:"+house.getTitle());

}

 

 

雪迪网

 

 

sessionFactory = new Configuration().configure().buildSessionFactory();

sessessionFactory = new Configuration().configure().buildSessionFactory();

session = sessionFactory.openSession();

Query query = session.createQuery("from House as h ");

System.out.println("使用iterate()方法查询数据");

Iterator it1 = query.iterate();

while(it1.hasNext()){

House house = (House)it1.next();

System.out.println("标题:"+house.getTitle());

}

System.out.println("----------------------");

System.out.println("再一次执行iterate()方法");

Iterator it2 = query.iterate();

while(it2.hasNext()){

House house = (House)it2.next();

System.out.println("标题:"+house.getTitle());

}

雪迪网

通过以上几个例子我们不难得出结论 :

list()方法将不会在缓存中读取数据,它总是一次性的从数据库中直接查询所有符合条件的数据,同时将获取的数据写入缓存。

iterate()方法则是获取了符合条件的数据的id 后,首先根据id 在缓存中寻找符合条件的数据,若缓存中无符合条件的数据,再到数据库中查询。

所以大家在使用的时候请根据自己的情况合理使用,才能够节省资源

本文链接: http://www.snowdi.com/699.html → 转载请注明文章出自 雪頔网
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值