hibernate 5的二级缓存案例讲解_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > hibernate 5的二级缓存案例讲解

hibernate 5的二级缓存案例讲解

 2018/1/12 21:46:26  keguan_li  程序员俱乐部  我要评论(0)
  • 摘要:hibernate5的二级缓存案例讲解大家好,今天来记录讲解一下磕磕绊绊的hibernate5的二级缓存配置,一条路摸到黑那么在这之前我们先了解一下hibernate的一级缓存和二级缓存分别是什么?说句通俗的话就是一级缓存的信息只能在同一个session间传递,而二级缓存是不同的session间可以访问的,可以跨越Session存在,可以被多个Session所共享。需要第三方缓存框架的加持那么什么数据适合放到二级缓存中呢?便是那些不经常改动又经常被访问的数据,比如省市信息等
  • 标签:hibernate 缓存
hibernate 5的二级缓存案例讲解

大家好,今天来记录讲解一下磕磕绊绊的hibernate5 的二级缓存配置,一条路摸到黑
那么在这之前我们先了解一下hibernate的一级缓存和二级缓存分别是什么?
说句通俗的话就是 一级缓存的信息只能在同一个session间传递,而二级缓存是不同的session间可以访问的,可以跨越Session存在,可以被多个Session所共享。需要第三方缓存框架的加持

那么什么数据适合放到二级缓存中呢?
便是那些不经常改动又经常被访问的数据,比如省市信息等,前台页面经常查询而没必要每次都要去数据库查询!

那么有什么三方框架可以支持hibernate的二级缓存呢?

EHCache: 可作为进程范围内的缓存,存放数据的物理介质可以是内存硬盘,对Hibernate的查询缓存提供了支持
OpenSymphony:可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持
SwarmCache:可作为集群范围内的缓存,但不支持Hibernate的查询缓存
JBossCache:可作为集群范围内的缓存,支持Hibernate的查询缓存

好,那么我们接下来就以EHCache来介绍一下hibernate二级缓存的用法

第一步:导入jar包(jar包附件给出
class="java" name="code">
ehcache-core-2.4.3.jar
hibernate-ehcache-5.0.7.Final.jar
commons-logging-1.1.1.jar

第二步:声明缓存(在hibernate.cfg.xml 中配置)
<!-- 使用二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!--设置缓存的类型,设置缓存的提供商 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property>
<!--但是在 hibernate 4中设置缓存提供商时是这样设置的
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>-->
<property name="hibernate.cache.use_query_cache">true</property>


第三步:需要设置EHCache配置文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"

>
 <diskStore path="C:/ehcache"/><!-- 需要在你的磁盘里面添加该目录 -->
         <defaultCache    
            maxElementsInMemory="10000" 
            eternal="false"  
            timeToIdleSeconds="120" 
            timeToLiveSeconds="120" 
            overflowToDisk="true" 
            maxElementsOnDisk="10000000" 
            diskExpiryThreadIntervalSeconds="120"  
            memoryStoreEvictionPolicy="LRU"   
            />  
</ehcache>


第四步:指定什么对象也就是model可以加入缓存
有两种配置方式,可以在hbm中创建安,也可以在cfg文件中创建
我们这里就以cfg文件配置为例

<class-cache usage="read-write" class="cn.patronli.domain.Order"/> <!-缓存的是对象-?
<collection-cache usage="read-write" collection="cn.patronli.domain.Customer.orders"/> <!-缓存的是集合-?

为了保险起见 我们需要给相对应的model  实现一个序列化接口 implements Serializable


那么如何在hbm中设置呢?需要再class后紧跟缓存配置,如下所示
<class name="Customer" table="t_customer" catalog="hibernateTest" lazy="true">
	<cache usage="read-write"/>


以上配置二选一 !!!!

那么最后我们就可以来进行测试了
public static void main(String[] args) {  
		  
        Session s1 = HibernateUtils.openSession();
        s1.beginTransaction();  
        Customer c1 = (Customer) s1.get(Customer.class, 1); // 从数据库中加载数据  
        System.out.println(c1.getName());
        s1.getTransaction().commit();  
        s1.close(); // 关闭session级别的一级缓存  
  
        Session s2 = HibernateUtils.openSession();
        s2.beginTransaction();  
        Customer c2 = (Customer) s2.get(Customer.class, 1); // 因为有了二级缓存的存在,并不会去查询数据库可以debug  观察控制台打印
        System.out.println(c2.getName());  
    }  











  • commons-logging-1.1.1.jar (59.4 KB)
  • 下载次数: 0
  • hibernate-ehcache-5.0.7.Final.jar (137.8 KB)
  • 下载次数: 0
  • ehcache-core-2.4.3.jar (982.8 KB)
  • 下载次数: 0
上一篇: Spring MVC原理及配置详解 下一篇: 没有下一篇了!
发表评论
用户名: 匿名