`
ch_space
  • 浏览: 111381 次
  • 性别: Icon_minigender_1
  • 来自: 农村进城务工人员
社区版块
存档分类
最新评论

hibernate学习笔记6--原生SQL、Query的list和iterator

阅读更多
1、原生SQL,为复杂查询提供帮助

getUser(){
  SQLquery q=session.createSQLQuery("select {u.*} from users u where username='"+username+"'",u);
  q.addEntity("u",Users.class);//u是表的别名
  return (Users)q.setMaxResults(1).uniqueResult();
}


2、Query的list与iterator

引用

robbin:
众所周知,List仅仅会填充二级缓存,却不能利用二级缓存,而iterator可以读二级缓存,然而无法命中的话,效率却很低。一个最好的办法就是,第一次查询使用List,随后的查询使用iterator,现在的问题是如何做到第一次查询使用List,随后查询使用iterator。

先来考察一下缓存的作用:缓存之所以可以命中,前提条件是该数据被使用的非常频繁,同时更新的可能性相当小,如果数据会频繁修改,那么毫无疑问,缓存不会带来任何好处。明确了这一点,我们就明白什么对象应该进行缓存了。显然,对于那些经常会被访问到的小批量的诸如基础信息,用户和权限信息是非常适合进行缓存的,这些数据我们可以在应用启动的时候就执行一次list方法查询,进行缓存填充(例如写一个InitBean类进行数据缓存初始化),此外在数据被修改的时候,再次执行list方法,进行缓存填充。而在使用这些数据的其他地方,统统使用iterator方法。这样就可以实现所谓的第一次查询使用List,随后的查询使用iterator了。


但在我的测试中,iterator方法首先会检索符合条件对象的OID(延迟加载其他属性!),当使用对象的非OID属性时,会再次发出SQL语句检索对象(不知道是在缓存还是数据库?),也就是说检索了两次,这样性能会像robbin说的比list高吗?(表示怀疑)

分享到:
评论
1 楼 kgdso 2010-08-10  
的确就是这样的。iterator也会先执行一次查询,类似select id from tablexxx, 然后再根据这些id去缓存那里检索,看看有没有现成的对象可以拿,如果没有的话,还要执行一次select from tablexxx where id=x来从数据库取得这个对象。

所谓iterator性能比list高主要是select from table 要比select id from table要快吧。

相关推荐

    开源项目-json-iterator-go.zip

    6. **社区支持**:作为开源项目,`json-iterator-go`有活跃的社区支持,持续维护和更新,确保了其与Go语言的最新版本保持同步。 在使用`json-iterator-go`时,开发人员可以按照以下步骤进行: 1. 引入库:首先,...

    c++ 的array源码分析和reverse-iterator和-Array-const-iterator类

    c++ 的array源码分析和reverse-iterator和-Array-const-iterator类

    Hibernate教程24_Hibernate的补充_list与iterator

    本教程将重点讲解在使用Hibernate时,如何处理查询结果集合,特别是通过`list()`和`iterator()`方法进行数据迭代的操作。 【描述】"http://blog.csdn.net/e421083458/article/details/8794127" 这个链接指向的是一...

    前端开源库-async-iterator-all

    6. **兼容性**:由于`async-iterator-all`依赖于ES6的生成器和异步生成器特性,因此在不支持这些特性的旧版本浏览器中可能无法直接运行。可以借助Babel等转译工具进行兼容处理。 总的来说,`async-iterator-all`是...

    java-util-iterator.pdf java-util-iterator.pdf

    根据提供的文件信息,本文将深入探讨Java中的`java.util.Iterator`接口及其在集合类中的应用。我们将从以下几个方面进行详细解析: ### 一、集合类的根接口:Collection `Collection`接口是Java集合框架的基础,它...

    Hibernate笔记

    4. **Query**: 用于执行HQL(Hibernate Query Language)或原生SQL查询。 5. **Lazy Loading**: 惰性加载机制,用于延迟加载关联对象。只有当真正需要访问关联对象时,Hibernate才会发起数据库查询来获取数据。 6. *...

    分析-Iterator-base12与-Container-base12

    分析-Iterator-base12与-Container-base12

    HIBERNATE_QUERY

    它支持多种查询方式,包括面向对象的查询语言(HQL)、条件查询(Query By Criteria, QBC)、示例查询(Query By Example, QBE)以及原生SQL查询等。 #### 二、面向对象查询语言 (HQL) HQL是一种类似SQL的语言,但...

    Laravel开发-multi-level-array-iterator

    `php-multi-level-array-iterator-master`这个项目很可能包含了完整的实现和示例,你可以下载并研究其代码,以获取更多关于如何在Laravel环境中创建和使用多级数组迭代器的详细信息。 总之,理解并掌握Laravel的...

    C#学习笔记整理-迭代器模式介绍

    迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 何时使用迭代器模式? 当需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,需要考虑使用迭代器...

    Hibernate面试题-详尽解析

    `Query`的`list`和`iterator`方法的不同 - **5.1 `Session`的`load`与`get`方法** - **`load`方法**: - 当Session缓存中未找到匹配对象时,会抛出`ObjectNotFoundException`异常。 - 可以返回实体的代理类实例...

    hibernate难点重点笔记

    《Hibernate难点解析与...理解并灵活运用uuid、get()与load()以及iterator()和list()的区别,是每个Hibernate开发者必备的技能。通过深入学习这些难点,开发者能够更好地驾驭Hibernate,从而提升项目的稳定性和性能。

    rh-nodejs6-nodejs-es6-iterator-2.0.0-5.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    rh-nodejs6-nodejs-es6-iterator-2.0.0-4.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    Triangular+Triangular-iterator+iterator-overflow.zip

    Triangular类,包含对Triangular类的提领操作Triangular_iterator类,以及异常类iterator_overflow。 输入输出样例为: (3,6) Triangular Series of 6 elements 6 10 15 21 28 36

    开源项目-thrift-iterator-go.zip

    开源项目“thrift-iterator-go.zip”是一个基于Go语言实现的工具,用于解码和编码Thrift消息,而无需依赖Thrift接口定义语言(IDL)。Thrift是一种跨语言的服务开发框架,由Facebook开源,旨在提供高效、轻量级的...

    hibernate语句大全

    以上介绍了Hibernate中几种常见的查询方式,包括HQL、QBC、原生SQL以及一些高级查询技巧如分组、排序等。掌握这些基本操作可以帮助开发者更高效地使用Hibernate框架进行数据访问操作。随着实践经验的积累,还可以...

Global site tag (gtag.js) - Google Analytics