hibernate学习笔记(二级缓存)
来源:互联网 发布:ubuntu 记事本软件 编辑:程序博客网 时间:2024/04/30 02:25
有人曾经问过gave king 问他hibernate最值得他骄傲的地方是什么?大家都以为他会说:是他提供的映射文件,面向对象化的操作。
而他却说:最值得骄傲的是他的缓存机制:
hibernate的缓存机制分为一级缓存和二级缓存,一级缓存即sessio级别的。二级缓存是sessionFactory级别的。
在二级缓存中,它不仅可以保存在内存中,还可以保存在硬盘上。当然这种缓存机制主要是针对大量的数据进行操作。如果数据量较少,可以采用一级缓存。
我采用的EhCache缓存。ehcache 是一个非常轻量级的缓存实现。
实现二级缓存:
1.导入jar包;两个:asm-attrs.jar,commons-logging-1.1.1.jar.
2.在主配置文件中添加属性:
<!-- 使用二级缓存 --><property name="hibernate.cache.use_second_level_cache">true</property><property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>3.在映射文件中配置:<cache usage="read-only"/>
注意:在这有4个值:有必要对这4个值进行介绍。
A.transactional:保存可重复的事物隔离级别,对于读/写比例大,很少更新的数据通常可以采用这种方式。
B.read-write:使用timestamp机制维护已提交的事物隔离级别,对于读/写比例大,很少更新的数据通常可以采用这种方式。
C.nonstrict-read-write:二级缓存与数据库中的数据可能会出现不一致的情况。应该设置足够短的缓存过期时间。否则就有可能从缓存中读取到脏数据,当一些数据很少改变(一天,两天都不改变的数据)并且这些数据如果出现数据库与缓存不一致的情况下影响并不大的时候,那么可以采用这种缓存策略。
D.read-only:当确定数据不会被更改时。我们可以使用这种缓存策略。
4.编写ehcache.xml文件。在src目录下新建一个这个文件
<?xml version="1.0" encoding="UTF-8"?><ehcache><!-- 如果内存放不下,就放到磁盘上的一个路径 --><diskStore path="d:/ehcache"/><!-- 内存中存放最多的对象个数 --><defaultCache maxElementsInMemory="200" eternal="false" timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true" /><!-- 保存的对象 --><cache name="com.test.bean.Student" maxElementsInMemory="200" eternal="false" timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true"/></ehcache>配置基本上就完成了。
然后可以测试了。
Session session1=sessionfactory.openSession();Transaction tx1=session1.beginTransaction();List<Student> list=session.createQuery("from Student s order by s.name asc").list();for(Student stu:list){System.out.println(stu.getName());}tx1.commit();System.out.println("---------------------------");Session session2=sessionfactory.openSession();Transaction tx2=session2.beginTransaction();Student s1=(Student)session2.get(Student.class, "4028ab81386ed77b01386ed77d57000c");Student s2=(Student)session2.get(Student.class, "4028ab81386ed77b01386ed77d570011");System.out.println(s1.getName());System.out.println(s2.getName());tx2.commit();开启两个session和两个transaction。
如果不配置二级缓存的话。它肯定是执行3条sql,但是配置了。就可以将后两条sql省略了。
over...
- hibernate学习笔记(二级缓存)
- Hibernate学习笔记----二级缓存
- Hibernate学习笔记:hibernate二级缓存攻略
- Hibernate学习笔记:hibernate二级缓存攻略
- Hibernate二级缓存的注解(学习笔记)
- Hibernate学习笔记(六) — Hibernate的二级缓存
- hibernate二级缓存笔记1
- 整理笔记---Hibernate二级缓存
- Mybatis学习笔记-二级缓存
- JPA学习笔记-二级缓存
- hibernate二级缓存配置学习记录
- 关于hibernate的二级缓存学习
- hibernate缓存学习之【二级缓存】
- hibernate学习:QBC及二级缓存
- J2EE系列之Hibernate4学习笔记(十九)--hibernate高级配置(配置hibernate二级缓存)
- Hibernate学习---第五节:hibernate二级缓存
- JPA学习笔记 - 使用二级缓存
- hibernate笔记(六)----事务,一二级缓存
- RVM 用法
- 极客文化渐成潮流
- 如何提高操作系统的实时性
- 常用js验证函数
- Android之父安迪·鲁宾:极客文化的代表
- hibernate学习笔记(二级缓存)
- php 表单提交checkbox复选框,传参数到另一个页面
- “极客文化”能否撬动世界?
- 武汉理工大学自动化学院研究生07年就业情况(官方统计)
- Tmux 安装和入门使用
- Enable saving of changes that require table to be re-created SQL server 2008
- 极客文化
- Jqgrid设置全选(选择)及获取选择行的值
- 开发即时位置感知的Android客户端