精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-08
String hql = "from Student";
对于这条语句的查询:
List<Student> stus = query.list(); 会把所有的查询结果放到list中。一次加载到内存。 语句:select student0_.id as id3_, student0_.studentage as studentage3_, student0_.studentname as studentn3_3_ from Student student0_//当执行list方法的时候
Iterator<Student> stus = query.iterate(); 该语句只把ID的值放到迭代器中,当遍历的时候,会根据ID的值再去数据库中查。并且该语句会产生N+1次查询。 语句1:select student0_.id as col_0_0_ from Student student0_ //当执行iterate方法的时候 语句2:select student0_.id as id3_0_, student0_.studentage as studentage3_0_, student0_.studentname as studentn3_3_0_ from Student student0_ where student0_.id=?//遍历获取值的时候
这两个方法各有千秋。请根据具体情况选择使用(牺牲内存或者牺牲网络资源)。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-11-08
同时要注意缓存问题。iterate可以更加有效使用二级缓存的。所以当缓存命中率非常高的时候,iterate效率可能反而更高。
|
|
返回顶楼 | |
发表时间:2013-01-07
mqchange 写道
String hql = "from Student";
对于这条语句的查询:
List<Student> stus = query.list(); 会把所有的查询结果放到list中。一次加载到内存。 语句:select student0_.id as id3_, student0_.studentage as studentage3_, student0_.studentname as studentn3_3_ from Student student0_//当执行list方法的时候
Iterator<Student> stus = query.iterate(); 该语句只把ID的值放到迭代器中,当遍历的时候,会根据ID的值再去数据库中查。并且该语句会产生N+1次查询。 语句1:select student0_.id as col_0_0_ from Student student0_ //当执行iterate方法的时候 语句2:select student0_.id as id3_0_, student0_.studentage as studentage3_0_, student0_.studentname as studentn3_3_0_ from Student student0_ where student0_.id=?//遍历获取值的时候
这两个方法各有千秋。请根据具体情况选择使用(牺牲内存或者牺牲网络资源)。
|
|
返回顶楼 | |
浏览 2300 次