Query中list和iterator的区别

1.返回的类型不一样,list()返回List,iterate()返回Iterator。

2.获取数据的方式不一样,list()直接查询数据库,iterate()会先到数据库中把ID都取出来,查询非ID数据时,会先到缓存中找,没有则以ID为条件发送sql到数据库检索,所以查询次数为N+1.

3.iterate会查询二级缓存,list只会查询一级缓存。

4.list()中返回的是实体对象,iterate()中返回的是代理对象。

5.list()执行时,直接运行所需要的查询语句,iterator()则是先执行得到对象ID的查询,然后根据ID取得所需。

总结:list()查询通常只会执行一个SQL语句,而iterator()查询则可能需要执行N+1条SQL语句(N为结果集中的记录数)。

猜你喜欢

转载自1160514291.iteye.com/blog/2308646