`
HelloSure
  • 浏览: 311638 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Query的list()与iterator()的区别

阅读更多
Query上有list()与iterator()方法,两者的差别在于list()方法在读取数据时,并不会利用到快取,而是直接再向数据库查询,而iterator()则将读取到的数据写到快取,并于读取时再次利用。

来看看下面的程序:

Session session = sessionFactory.openSession();
       
Query query = session.createQuery("from User");
List users = query.list();
users = query.list();

session.close();


这个程序片段会使用两次SQL来查询数据库:

Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_
Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_


如果在Session关闭之前,要再将所有数据在取出,可以使用iterator()方法,例如:

Session session = sessionFactory.openSession();

Query query = session.createQuery("from User");
Iterator users = query.iterate();
users = query.iterate();

session.close();


这个程序片段会使用一次SQL向数据库查询,第二次则直接从快取中取得数据:

Hibernate: select user0_.id as col_0_0_ from user user0_


由于使用iterator()方法时会使用到Session level快取,所以在查询大量数据时,会耗用大量的内存,必要时可以使用Session的evict()或clear()方法来清除快取。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pcno1/archive/2009/01/07/3725586.aspx
分享到:
评论

相关推荐

    Hibernate教程24_Hibernate的补充_list与iterator

    【标题】"Hibernate教程24_Hibernate的补充_list与iterator" 在Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。本教程将重点讲解在使用Hibernate时,如何处理查询结果集合...

    HIBERNATE_QUERY

    ### HIBERNATE_QUERY知识点详解 ...List<Cat> blueCats = query.list(); ``` 以上就是关于Hibernate查询机制的相关知识点介绍,通过这些方法和技术,开发者可以根据具体的应用需求选择最合适的查询方式。

    getHibernateTemplate分页-模糊查询

    List list = query.list(); iterator = list.iterator(); return iterator; } ``` #### 四、模糊查询 模糊查询通常用于根据部分匹配条件来查找记录。在Hibernate中,可以使用`like`语句来实现模糊查询。 **...

    Hibernate几种获数据方法比较

    本文将深入探讨Hibernate中的几种主要的数据获取方式,包括`Session.get()`与`Session.load()`、`Query.iterator()`与`Query.list()`以及使用HQL(Hibernate Query Language)进行查询。 ### 1. `Session.get()`与`...

    1、hibernate 简单语法1

    Hibernate 提供了多种方式来处理结果集,例如使用 `list()` 方法获取整个结果集,或者使用 `Iterator` 迭代器来逐个处理结果集。例如: ```java Query query = session.createQuery("from Student"); List<Student> ...

    HQL.pdf数据查询语句

    List<User> names = query.list(); Iterator<User> iterator = names.iterator(); while(iterator.hasNext()){ User user = iterator.next(); System.out.println(user.getId() + " " + user.getUsername() + " " ...

    Struts2实现分页

    <s:iterator value="list" status="st"> <td><s:property value="username"/> <td><s:property value="password"/> <td><s:property value="power"/> <td><s:property value="cdate"/> <td><a href="input?user....

    hql语句 使用大全

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的数据检索方式,使开发人员能够更高效地与数据库交互。本文将详细介绍HQL的基本用法及高级特性。 #### 1. 查询所有记录(Select) ...

    hibernate语句大全

    List<Customer> customers = query.list(); ``` ##### 4. QBC方式(Query By Criteria) - **定义**:QBC是Hibernate提供的另一种查询方式,基于标准的Java API,提供了更多的灵活性。 - **应用场景**:构建复杂...

    hibernate中的几个重要方法以及调用[参照].pdf

    2. list()与iterator()方法: - list()方法:在执行时,list()一次性获取所有查询结果并将其转换为对象列表。这可能导致一次性加载大量数据,特别是在大型结果集时可能会消耗大量内存,甚至引发内存溢出。 - ...

    hibernate常用语句

    在Java开发中,Hibernate是一个流行的持久化框架,它简化了数据库操作,将对象与关系数据库之间的映射管理自动化。本篇将深入讲解在Hibernate中常用的查询语句,包括HQL(Hibernate Query Language)和QBC(Query By...

    hibernate criteria 分组 排序 关联

    ### 六、基于对象的查询(Query Based on Objects) 当查询条件基于一个实体对象时,可以使用`Example.create()`方法。 **示例代码**: ```java User user = new User(); user.setAge(30); Criteria criteria = ...

    HQL经典语句

    使用`iterator()`方法遍历已加载的数据集,如`orderList.iterator()`,这在处理大量数据时特别有用,可以有效降低内存消耗。 - **基于OID查询** OID(Object Identity)查询,通过`session.get()`或`session.load...

    EJB3_Persistence开发手册-EJB3_QL查询

    final List<Order> result = query.getResultList(); final Iterator<Order> iterator = result.iterator(); while (iterator.hasNext()) { Order order = iterator.next(); // 处理Order对象 } ``` 在这个例子中...

    HQL实用技术

    5. **返回List集合**:Query.list() 返回List集合,Query.iterate() 返回Iterator。 - **Query.list()** 和 **Query.iterate()** 的主要区别在于返回类型和查询策略: - **Query.list()** 直接查询数据库,并将...

    HQL经典查询语句[文].pdf

    在软件开发领域,尤其是涉及到对象关系映射(ORM)框架如Hibernate时,HQL(Hibernate Query Language)是一种非常重要的查询工具。HQL是Hibernate提供的面向对象的查询语言,它允许开发者以类和属性的方式来查询...

    Hibernate操作

    Iterator iteator = list.iterator(); if (iteator.hasNext()) { person = (Person) iteator.next(); } return person; } ``` - **HQL 查询**:使用 HQL (Hibernate Query Language) 构造查询语句,其中 `?` ...

    Hibernate查询详解

    Hibernate查询详解涵盖了多个关键知识点,包括get()和load()方法的区别、list()和iterator()方法的差异、HQL(Hibernate Query Language)与SQL的对比、HQL查询的步骤及高级特性,以及实体的删除和更新操作。...

Global site tag (gtag.js) - Google Analytics