Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,
1:返回的类型不一样,list()返回List, iterate()返回Iterator,
2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1。
3:iterate会查询2级缓存, list只会查询一级缓存。
4: list()中返回的List中每个对象都是原本的对象, iterate()中返回的对象是代理对象.(debug可以发现)
改写BookDao以及实现类来测试一下list()和iterate();在BookDao中添加一个方法:
- public void iterate(){
-
Iterator itr = getSession().createQuery("from Book").setMaxResults(5).iterate();
-
while(itr.hasNext()){
-
- Book b = (Book)itr.next();
- System.out.println(b);
- }
- }
test case:
- BookDao dao = new BookHibernateDao();
- dao.iterate();
-
System.out.println("**************************");
- dao.iterate();
-
List<Book> list = dao.pagedList(6, 5);
-
list = dao.pagedList(6, 5);
分享到:
相关推荐
今天我们将探讨的是Hibernate的二级缓存,特别是`list`和`iterate`方法的区别,这对于优化数据库访问性能至关重要。 一级缓存是Hibernate内置的,它是Session级别的缓存,自动管理实体对象的生命周期。然而,一级...
### HIBERNATE_QUERY知识点详解 #### 一、概述 Hibernate作为一款强大的对象关系映射(ORM)框架,为Java开发者提供了一套高效且简洁的方式来处理数据库操作。它支持多种查询方式,包括面向对象的查询语言(HQL)...
提供的源码`s2sh_relation23_list_iterate`可能包含了演示如何使用Hibernate进行查询和遍历结果的实例。通过阅读和运行这些代码,你可以深入理解`list()`和`iterator()`在实际项目中的应用。 总之,理解和掌握`...
关于iterate和list的使用,由于无法确保查询条件的重复性,通常很难保证iterate能充分利用缓存。而且,iterate可能会导致1+N问题,因为即使有缓存,每次迭代时仍需检查数据库是否存在新数据。相比之下,list在某些...
Query 对象提供了许多方法来查询持久化对象,例如 list、iterate 等。Query 对象可以根据不同的条件来查询持久化对象。 Hibernate 的核心接口分别是 Configuration、SessionFactory、Session、Transaction 和 Query...
List<Customer> customers = query.list(); ``` ##### 4. QBC方式(Query By Criteria) - **定义**:QBC是Hibernate提供的另一种查询方式,基于标准的Java API,提供了更多的灵活性。 - **应用场景**:构建复杂...
List<Role> list = query.list(); session.close(); return list; } } ``` 3. **Struts配置** - 在`struts-config.xml`中定义Action映射和结果页面。 - 使用Struts标签库进行页面逻辑控制和数据展示。 ...
`单端代理的批量抓取.PNG` 可能讲解了如何通过Hibernate的批处理技术提高性能,如设置批处理大小,利用Session的flush模式,以及Query的iterate()和list()方法的区别。批量操作可以减少数据库交互次数,提升应用性能...
一.使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化... (7).createQuery(String HQL).list()/iterate()/uniqueResult(); //HQL(Hibernate Query Language)语句查询
这两个方法都用于执行HQL(Hibernate Query Language)查询。`find`返回一个List集合,一次性将所有结果加载到内存,适合于小规模数据的查询。而`iterate`返回一个迭代器,每次调用`next()`方法时才从数据库中获取一...
同时,若要启用查询缓存,还需设置`hibernate.cache.use_query_cache=true`。 二级缓存的工作原理可以简单地理解为一个Map,其中Key代表对象的ID,Value则是对应的POJO对象。无论是通过list、load还是iterate操作,...
2. **查询**: Hibernate提供HQL(Hibernate Query Language)和Criteria API进行查询,HQL类似于SQL,Criteria API更加面向对象。 3. **检索**: `Session`的`get()`、`load()`方法获取单个实体,`list()`, `scroll()...
2. **数据加载**:`query.list()`默认会加载所有数据到内存,而`query.iterate()`则只会加载主键,后续需要时才会按需加载具体数据。`lazy="false"`表示实体加载时不启用懒加载,即立即加载所有关联数据。 3. **...
不同的操作,如`list`、`load`和`iterate`,对缓存的使用策略不同。`list`操作不会使用缓存,而`iterate`会先查询所有ID,然后逐个从缓存或数据库加载对象。 在Ehcache配置中,`maxElementsInMemory`定义了缓存中...
<property name="hibernate.cache.use_query_cache">true ``` 这里我们使用EhCache作为缓存实现。需要注意的是,在不同的Hibernate版本中,EhCache的包名可能有所不同。例如,在2.1版本中使用`...
- 执行`save()`、`update()`、`saveOrUpdate()`等操作时,如果使用`load()`、`get()`、`list()`、`iterate()`等方法,则可能会触发缓存的刷新。 - 在调用`flush()`方法时,会将Session内的状态同步到数据库,并且...
Iterator iter = query.iterate(); while(iter.hasNext()){ Object[] objs = (Object[])iter.next(); for (int i = 0; i ; i++) { System.out.print(objs[i]); } System.out.println(); } ``` 如果你想将查询...