Hibernate里Query的list()和iterate()方法的区别

1.Query接口的list与iterate方法:

iterate()方法:

Return the query results as an Iterator. Ifthe query contains multiple results pre row, the results are returned in aninstance ofObject[].
Entities returned as results are initialized ondemand. The first SQL query returns identifiers only.

(返回的实体只有在使用时才会被初始化,执行该方法查询时只会返回实体的标识符(即id))

list()方法:

Return the query results as a List. If thequery contains multiple results pre row, the results are returned in aninstance ofObject[].

2.两者区别:

对于Query接口的list()方法与iterate()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。

3.例子:

使用iterate方法

1 /*
2 Iterator<People> iter = (Iterator<People>)query.iterate();
3 while(iter.hasNext())
4 {
5     session.delete(iter.next());
6 }
7 */

使用list方法

1 /*
2 list = (List<People>)query.list();
3 for(Iterator<People> iter = list.iterator(); iter.hasNext();)
4 {
5     session.delete(iter.next());
6 }
7 */

关于这两种删除数据库中的记录的方式的效率的对比(假如共查到5条记录):
iterate()方法:执行6条select语句和5条delete语句。
list()方法:执行1条select语句和5条delete语句。
此时list的效率比较高。

 

posted @ 2017-03-16 01:59  XH_Chiang  阅读(278)  评论(0编辑  收藏  举报