hibernate 是一个持久层的框架,经常访问物理数据库,为了降低应用程序访问物理数据库的频次, 从而提升性能,
hibernate缓存机制分为: 一类是session 级缓存,二是sessionFactory级缓存
session是一级缓存 内置的,不能卸载的 是事务范围的缓存
sessionFactory 是二级缓存 SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。
二级缓存的配置:
(1)准备
把ehcache-1.2.3.jar加入到classpath中
在hibernate.cfg.xml中加入EHCache缓存插件的提供类
Category.hbm.xml
<class name="org.qiujy.domain.cachedemo.Category" table="categories">
< !— 配置缓存,必须紧跟在class元素后面 对缓存中的Category对象采用读写型的并发访问策略 -->
<cache usage="read-write"/>
<id name="id" type="java.lang.Long">
<column name="id" />
< generator class="native" />
</id>
<!-- 配置版本号,必须紧跟在id元素后面 -->
<version name="version" column="version" type="java.lang.Long" />
<property name="name" type="java.lang.String">
<column name="name" length="32" not-null="true"/>
</property>
< property name="description" type="java.lang.String">
< column name="description" length="255"/>
< /property>
<set name="products" table="products" cascade="all" inverse="true">
<!-- Hibernate只会缓存对象的简单属性的值, 要缓存集合属性,必须在集合元素中也加入<cache>子元素 而Hibernate仅仅是把与当前持久对象关联的对象的OID存放到缓存中。 如果希望把整个关联的对象的所有数据都存入缓存, 则要在相应关联的对象的映射文件中配置<cache>元素 -->
<cache usage="read-write"/>
<key column="categoryId" not-null="true"/>
< one-to-many class="org.qiujy.domain.cachedemo.Product"/>
< /set>
< /class>
</hibernate-mapping>
Product.hbm.xml
<class name="org.qiujy.domain.cachedemo.Product" table="products">
<cache usage="read-write"/>
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="native" />
< /id> <!-- 配置版本号,必须紧跟在id元素后面 -->
<version name="version" column="version" type="java.lang.Long" />
< property name="name" type="java.lang.String">
<column name="name" length="32" not-null="true"/>
< /property>
<property name="description" type="java.lang.String">
<column name="description" length="255"/>
</property>
<property name="unitCost" type="java.lang.Double">
<column name="unitCost" />
</property>
< property name="pubTime" type="java.util.Date">
<column name="pubTime" not-null="true" />
</property>
<many-to-one name="category" column="categoryId" class="org.qiujy.domain.cachedemo.Category" cascade="save-update" not-null="true">
< /many-to-one>
< /class> </hibernate-mapping>
2) 编辑ehcache.xml文件:
<ehcache> <diskStore path="c://ehcache/"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /> <!-- 设置Category类的缓存的数据过期策略 --> <cache name="org.qiujy.domain.cachedemo.Category" maxElementsInMemory="100" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" /> <!-- 设置Category类的products集合的缓存的数据过期策略 --> <cache name="org.qiujy.domain.cachedemo.Category.products" maxElementsInMemory="500" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" /> <cache name="org.qiujy.domain.cachedemo.Product" maxElementsInMemory="500" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" /> </ehcache>
配置的元素说明: 元素或属性 描述 <diskStore> 设置缓存数据文件的存放目录 <defaultCache> 设置缓存的默认数据过期策略 <cache> 设定具体的命名缓存的数据过期策略 每个命名缓存代表一个缓存区域,每个缓存区域有各自的数据过期策略。命名缓存机制使得用户能够在每个类以及类的每个集合的粒度上设置数据过期策略。 cache元素的属性 name 设置缓存的名字,它的取值为类的全限定名或类的集合的名字 maxInMemory 设置基于内存的缓存中可存放的对象最大数目 eternal 设置对象是否为永久的,true表示永不过期,此时将忽略timeToIdleSeconds和timeToLiveSeconds属性; 默认值是false timeToIdleSeconds 设置对象空闲最长时间,超过这个时间,对象过期。当对象过期时,EHCache会把它从缓存中清除。 如果此值为0,表示对象可以无限期地处于空闲状态。 timeToLiveSeconds 设置对象生存最长时间,超过这个时间,对象过期。 如果此值为0,表示对象可以无限期地存在于缓存中。 overflowToDisk 设置基于内在的缓存中的对象数目达到上限后,是否把溢出的对象写到基于硬盘的缓存中
- Hibernate笔记——缓存机制详细分析
原文:http://www.cnblogs.com/xiaoluo501395377/p/3377604.html ========================================== ...
- java框架篇---hibernate之缓存机制
一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...
- Hibernate学习---缓存机制
前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...
- Spring控制Hibernate的缓存机制ehcache
首先在spring.xml中进入bean <prop key="hibernate.cache.use_second_level_cache">true</pro ...
- 【Hibernate 7】浅谈Hibernate的缓存机制
一.Hibernate缓存机制简介 对于Hibernate本身来说,它的缓存主要包括三部分:session缓存(一级缓存).二级缓存.查询缓存. 1.1,session缓存 随着session的关闭而 ...
- hibernate 的缓存机制
这是面试中经常问到的一个问题,楼主可以按照我的思路回答,准你回答得很完美,首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具 ...
- hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...
- Hibernate 所有缓存机制详解
hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...
- Hibernate所有缓存机制详解
hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...
随机推荐
- Oracle backgroup processes
PMON: Process Monitor 用自己主动注冊动态监听,处理异常进程. SMON: System Monitor 用于instance recovery. LCKn:仅使用于RAC数据库, ...
- 如何用C#把Doc文档转换成rtf格式
先在项目引用里添加上对Microsoft Word 9.0 object library的引用 using System; namespace DocConvert { class DoctoRtf ...
- web开发 - 从零开始 - 01 - 常见样式
1.width & height 2.background : a.background-color b.background-image:url() c.background-repea ...
- 自学XSL的几个例子
XSL 指扩展样式表语言(EXtensible Stylesheet Language).XSL用来描述XML文件的格式,类似于我们可以用CSS描述HTML的格式.具体用法请转:http://www. ...
- android入门——数据存储
首先是SharedPreferences 用户偏好 package com.example.wkp.aboutdata; import android.content.Intent; import a ...
- SqlServer查询数据库所有表
//SqlServer查询数据库所有表SELECT * FROM SYSOBJECTS WHERE TYPE='U' and name like '%dict%'
- JS控制静态页面之间传递参数获取参数并应用
在项目中遇到这也一个问题: 有a.html和b.html. 1.a页面已经打开,b页面尚未打开,我希望在a页面设置好一些列参数,比如背景色,宽度等参数,传递给b页面,好让b页面在打开就能应用. 2.a ...
- iCloud同步测试
步骤一 在iPad上拍照A后,相机胶卷与照片流都出现照片A --> Mac上iCloud我的照片流内出现照片A --> iphone上我的照片流出现照片A 同理,在iphone拍摄照片B后 ...
- Java中的String,StringBuffer,StringBuilder详解与区别
1.String Java中string类是不可变的,其中在声明的源代码中用的final,所以只能声明一次.所以每次在明面上的改变其实是重新生成一个String对象,指针指向新的String对象.同时 ...
- 环境配置与JBoss安装-EJB3.0入门经典学习笔记(1)
目录 1. JDK的安装 2. JBoss的安装 3. JBoss安装目录说明 1. JDK的安装 1) 下载JDK 下载地址:http://www.oracle.com/technetwork/ja ...