在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语句直接对应关联了,查询条件就不会变了。)