首页 > 代码库 > hibernate中hql语句中list和iterate区别

hibernate中hql语句中list和iterate区别

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


两次执行list()方法,每次执行都是发出一条SQL语句,查询所有数据。
下面看看两次执行iterate()方法的输出情况
两次执行iterate()方法,第一次执行时发出了N+1条SQL语句,而第二次执行,则只发出一套SQL语句,与先执行list()方法后执行iterate()方法时一致。这种情况产生的原因是因为Hibernate的缓存
1.list()方法将不会在缓存中读取数据,它总是一次性的从数据库中直接查询符合条件的数据,同时将获取的数据写入缓存。
2.iterate()方法则是获取了符合条件的数据的id后,首先根据id在缓存中寻找符合条件的数据,若缓存中无符合条件的数据,再到数据库中查询

hibernate中hql语句中list和iterate区别