hibernate二级缓存是由SessionFactory管理所以又叫SessionFactory级缓存它是通过不同的类库来实现的比如ehcacheoscache等和一级缓存一样二级缓存也是用来缓存实体对象的对普通属性不缓存
hibernate二级缓存的使用需要进行必要的配置主要是四个地方(这里以ehcache为例)
> 配置echcachexml文件
>开启二级缓存修改hibernatecfgxml文件
true
>指定缓存产品提供商修改hibernatecfgxml文件
orghibernatecacheEhCacheProvider
>指定那些实体类使用二级缓存(两种方法)
)在映射文件中采用标签
)在hibernatecfgxml文件中采用标签
hibernate二级缓存配置上之后就成了客观存在hibernate在使用某些方法的时候默认就使用和维护了二级缓存(哪怕你出于某种原因希望使用也不行)因此在使用二级缓存时进行一定的控制还是必要的Session就提供了设置使用二级缓存的模式的方法(setCacheMode)来实现当session调用某个方法时对二级缓存的存取改变
实体类
Studentjava
publicclassStudent{
privateIntegerid;
privateStringname;
//一系列的settergetter方法
}
映射文件
Studenthbmxml
<classname=comsxthibernatecacheentityStudenttable=sxt_hibernate_student>
<!指定本类的对象使用二级缓存(这也可以放在hibernatecfgxml中统一指定)>
<!
<cacheusage=readonly/>
>
<idname=idlength=>
<generatorclass=native></generator>
</id>
<propertyname=namelength=></property>
</class>
二级缓存配置文件
ehcachexml
<ehcache>
<!当二级缓存溢出时对象保存的临时磁盘路径>
<diskStorepath=javaiotmpdir/>
<!name=sampleCache缓存名字
maxElementsInMemory=缓存里可存放的最大对象数
eternal=true缓存对象是否永久有效(true表示是)
timeToIdleSeconds=对象在缓存中存活的空闲时间即空闲多久它就失效单位是秒
timeToLiveSeconds=对象在缓存中存活的时间单位是秒
overflowToDisk=true当缓存溢出时对象是否保存到磁盘上保存的磁盘路径由<diskStore>中的path指定
>
<defaultCache
maxElementsInMemory=
eternal=false
timeToIdleSeconds=
timeToLiveSeconds=
overflowToDisk=true
/>
</ehcache>
hibernate配置文件
hibernatecfgxml
<hibernateconfiguration>
<sessionfactory>
<propertyname=nnectionurl>jdbc:oracle:thin:@localhost::ORCL</property>
<propertyname=nnectiondriver_class>oraclejdbcdriverOracleDriver</property>
<propertyname=nnectionusername>scott</property>
<propertyname=nnectionpassword>yf</property>
<propertyname=hibernatedialect>orghibernatedialectOracleDialect</property>
<propertyname=hibernateshow_sql>true</property>
<!开启二级缓存其实hibernate默认就是开启的这里显示的指定一下>
<propertyname=hibernatecacheuse_second_level_cache>true</property>
<!指定二级缓存产品的提供商>
<propertyname=hibernatecacheprovider_class>orghibernatecacheEhCacheProvider</property>
<mappingresource=com/sxt/hibernate/cache/entity/Studenthbmxml/>
<!指定那些类使用二级缓存>
<classcacheusage=readonlyclass=comsxthibernatecacheentityStudent/>
</sessionfactory>
</hibernateconfiguration>