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为结果集中的记录数)。