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快速开发框 ...
随机推荐
- 常见前端面试题http部分
1.常见http状态码 100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息 200 OK 正常返回信息 20 ...
- 最简单的神经网络-感知器-python实现
import numpy as np import matplotlib.pyplot as plt X=np.array([[1,3,3], [1,4,3], [1,1,1]]) Y=np.arra ...
- 廖雪峰Python电子书总结
函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ...
- shell截取小数点前后的子串
- shell设置用户自己的环境变量
- MySQL系列之三查询优化
通常来说,查询的生命周期大致可以按照顺序来看从客户端到服务端,然后在服务器上进行解析,生产执行计划, 执行,并返回结果给客户端.其中的执行阶段可以认为是整个生命周期中最重要的阶段,其中包括了大量为了检 ...
- globalAlpha 示例
代码实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- join()、split()
join()用于把数组转化为字符串 var arr=['hello','world','kugou']; document.write(arr.join(''));//helloworldkugou ...
- 25-Node.js学习笔记-express-app.locals对象
app.locals对象 将变量设置到app.locals对象下面,这个数据在所有的模板中都可以获取到 app.locals.users=[{ name:'柠檬不酸', age:20 },{ name ...
- boost asio scalability and multithreading
A library such as Boost.Asio is typically used to achieve greater efficiency. With no need to wait f ...