Hibernate4教程六:性能提升和二级缓存
- User user = (User) session.createCriteria(User.class)
- .setFetchMode("permissions", FetchMode.JOIN)
- .add( Restrictions.idEq(userId) )
- .uniqueResult();
- 当宿主被加载时,关联、集合或属性被立即抓取。
-对集合类中的每个元素而言,都是直到需要时才去访问数据库。除非绝对必要,Hibernate不会试图去把整个集合都抓取到内存里来(适用于非常大的集合)。
- 对返回单值的关联而言,当其某个方法被调用,而非对其关键字进行get操作时才抓取。
- 对返回单值的关联而言,当实例变量被访问的时候进行抓取。与上面的代理抓取相比,这种方法没有那么“延迟”得厉害(就算只访问标识符,也会导致关联抓取)但是更加透明,因为对应用程序来说,不再看到proxy。这种方法需要在编译期间进行字节码增强操作,因此很少需要用到。
- 对属性或返回单值的关联而言,当其实例变量被访问的时候进行抓取。需要编译期字节码强化,因此这一方法很少用到。
- public class HibernateSessionRequestFilter implements Filter {
- private SessionFactory sf;
- public void doFilter(...)throws...{
- sf.getCurrentSession().beginTransaction();
- chain.doFilter(request, response);
- sf.getCurrentSession().getTransaction().commit();
- }
- public void init(FilterConfig filterConfig) throws ServletException {
- sf = new Configuration().configure().buildSessionFactory();
- }
- public void destroy() {}
- }
- Parent p = (Parent) sess.load(Parent.class, id);
- Child c = new Child();
- c.setParent(p);
- p.getChildren().add(c); //不用抓取集合
- sess.flush();
- <property name="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>

- <cache
- usage="transactional|read-write|nonstrict-read-write|read-only" (1)
- region="RegionName" (2)
- include="all|non-lazy" (3) />
- <class name="eg.Immutable" mutable="false">
- <cache usage="read-only"/>
- ....
- </class>
- <class name="eg.Cat" .... >
- <cache usage="read-write"/>
- <set name="kittens" ... >
- <cache usage="read-write"/>
- ....
- </set>
- </class>

ScrollableResult cats = sess.createQuery(“from Cat as cat”).scroll(); //很大的结果集,可滚动的结果集
while ( cats.next() ) {
Cat cat = (Cat) cats.get(0);
doSomethingWithACat(cat);
sess.evict(cat);
}
- sessionFactory.evict(Cat.class, catId); //evict a particular Cat
- sessionFactory.evict(Cat.class); //evict all Cats
- sessionFactory.evictCollection(“Cat.kittens”, catId); //evict a particular collection of kittens
- sessionFactory.evictCollection(“Cat.kittens”); //evict all kitten
- <?xml version="1.0" encoding="UTF-8"?>
- <ehcache>
- <diskStore path="java.io.tmpdir"/>
- <defaultCache
- maxElementsInMemory="10000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
- overflowToDisk="true"
- />
- </ehcache>
- <property name="hibernate.cache.use_second_level_cache">true</property>
- <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
- <property name="cache.use_query_cache">false</property>
- <property name="cache.use_query_cache">false</property>
- <property name="cache.use_second_level_cache">true</property>
- <property name="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>
- s = sf.openSession();
- t = s.beginTransaction();
- UserModel um1 = (UserModel)s.load(UserModel.class, "1");
- System.out.println("um1=="+um1);
- t.commit();
- s = sf.openSession();
- t = s.beginTransaction();
- UserModel um2 = (UserModel)s.load(UserModel.class, "1");
- System.out.println("um2=="+um2);
- t.commit();
- s = sf.openSession();
- t = s.beginTransaction();
- UserModel um3 = (UserModel)s.load(UserModel.class, "1");
- System.out.println("um3=="+um3);
- t.commit();
true);
- s = sf.openSession();
- t = s.beginTransaction();
- Query query1 =s.createQuery("select Object(o) from UserModel o");
- query1.setCacheable(true);
- List list1 = query1.list();
- System.out.println("list1=="+list1);
- t.commit();
- s = sf.openSession();
- t = s.beginTransaction();
- Query query2 =s.createQuery("select Object(o) from UserModel o");
- query2.setCacheable(true);
- List list2 = query2.list();
- System.out.println("list2=="+list2);
- t.commit();
- s = sf.openSession();
- t = s.beginTransaction();
- Query query3 =s.createQuery("select Object(o) from UserModel o");
- query3.setCacheable(true);
- List list3 = query3.list();
- System.out.println("list3=="+list3);
- t.commit();
Hibernate4教程六:性能提升和二级缓存的更多相关文章
- Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案
Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案 1. 业务场景 android+webview h5 css背景图性能提升1 2. ...
- Hibernate(十六):Hibernate二级缓存
Hibernate缓存 缓存(Cache):计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如磁盘上的文件或者数据库)之间,起作用是降低应用程序直接读取永久性数据存储源的频率,从而提高应用 ...
- Hibernate 性能优化之二级缓存
二级缓存是一个共享缓存,在二级缓存中存放的数据是共享数据特性 修改不能特别频繁 数据可以公开二级缓存在sessionFactory中,因为sessionFactory本身是线程安全,所 ...
- Hibernate4教程六(2):基本实现原理
整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Sessio ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- SQL Server 2014里的性能提升
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!! 缓存池扩展(Buffer Pool Extensions) 缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如S ...
- 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能
[.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2 ...
- ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存
ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate : Hibernate是一个持久层框架,经常访问物理数据库 ...
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...
- tensorflow的reshape操作tf.reshape()
在处理图像数据的时候总会遇到输入图像的维数不符合的情况,此时tensorflow中reshape()就很好的解决了这个问题. 更为详细的可以参考官方文档说明: numpy.reshape reshap ...
- JavaScript面向对象编程(1)-- 基础
自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...
- 2018-8-10-如何使用-Q#
title author date CreateTime categories 如何使用 Q# lindexi 2018-08-10 19:16:51 +0800 2018-2-13 17:23:3 ...
- 微信小程序(15)--上传图片公用组件(2)
接下来开始写写上传图片的公用组件,可以自定义上传几张图片. chooseImage文件夹里面的index.wxml和index.js,涉及图片上传,删除,预览. <view class=&quo ...
- Java疯狂讲义笔记——枚举类
枚举类 ——Java5[基础知识]1,定义枚举类——关键字 enum (地位与class.interface相同).2,枚举类是一个特殊的类,可以有成员变量.方法,实现一个或多个接口,定义自己的构造器 ...
- 用setInterval方法实现弹框闪烁
每次看到某电商平台的拼团提示会觉得很有趣也很方便,正好自己在学习小程序,那就想个法子实现一下这种效果咯~思虑了一下还是觉得用setIntercal方法比较简便(数据方面就先不考虑了,我这里只做一下表现 ...
- Struts2之param标签的使用
struts2的s:param标签主要有两个属性name与value: 传值 若想在value属性中输入字符串,则可以这样写:<s:param name="tableTitle&quo ...
- C# 批量修改考勤设备时间
自己工作中用到的小程序,每次远行后批量改一次 如下: 其中的zkemkeeper是中控的相关组件,因是系统组件,须要先注册相关文件后才有效 using System; using System.Col ...
- python-字符、字符串、函数处理
1.列表元祖字典集合 列表 list = ["a", "b", "c", "d"] 元祖 tup = (1, 2, 3, ...