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高吗?(表示怀疑)
分享到:
相关推荐
java-util-iterator.pdfjava-util-iterator.pdfjava-util-iterator.pdf
c++ 的array源码分析和reverse-iterator和-Array-const-iterator类
开源项目-json-iterator-go.zip,jsoniter is now 100% compatible with json.Marshal and json.Unmarshal
分析-Iterator-base12与-Container-base12
Hibernate中的query 博客分类: • Hibernate HibernateSQLSQL ServerMySQLJDBC Hibernate中的query.setFirstResult(),query.setMaxResults(); 一、query.scroll()和query.setFirstResult(),query....
开源项目-thrift-iterator-go.zip,decode/encode thrift message without IDL
前端开源库-async-iterator-allAsyncIterator All,从异步迭代器收集所有值,并将其作为数组返回
Laravel开发-multi-level-array-iterator 提供了一种在任意深度的嵌套数组之间循环的方法
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Triangular类,包含对Triangular类的提领操作Triangular_iterator类,以及异常类iterator_overflow。 输入输出样例为: (3,6) Triangular Series of 6 elements 6 10 15 21 28 36
资源来自pypi官网。 资源全名:period_iterator-1.2.1-py3-none-any.whl
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
面向对象程序设计英文教学课件:14-Design-Iterator.pptx
一个Iterator的实例1---马克-to-win java视频迭代器的详细描述
Iterator.rarIterator.rarIterator.rarIterator.rarIterator.rar迭代器设计模式