Hibernate学习_019_list()&iterate()区别

在Hibernate中我们遍历表的时候,有两个方法可以使用。一个是list(),一个是iterate()方法。使用这两个方法都可以取出表中的数据,但是他们有如下两个主要的区别:

1:iterate()方法,会先发出一条sql语句,先取出满足条件的记录的id值组成一个list。在正式使用其元素的时候,然后在根据这个id值去数据库中取出真实的数据。所有如果遍历一个含有N条记录的集合的时候,会发出N+1条SQL语句,一条语句取出所有记录的id值。然后依次发出N条SQL语句来分别一条一条的取出对应的记录。

2:在同一个Session里,如果执行两次list()方法,会发出两条SQL语句,而iterate()方法只需要发出一条SQL语句,也就是Iterate()方法会使用Session级别的缓存,而list方法不可以使用session级别的缓存。(其实,list()不可以使用一级缓存<Session级别缓存>,二级缓存<SessionFactiory级别缓存>,只可以使用三级缓存<查询缓存>,原因是因为list()方法每次的查询条件是不固定的,所以每次干脆都从数据库中去最新数据,而查询缓存的特点就是特定SQL语句和内存中数据对应建立关联,所以,既然SQL语句直接对应关联了,查询条件就不会变了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值