hibernate在java中使用如何实现二级缓存

  介绍

本篇文章为大家展示了hibernate在java中使用如何实现二级缓存,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

hibernate的二级缓存

<强>一、缓存概述

缓存(缓存):计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝。缓存的物理介质通常是内存

<强> hibernate中提供了两个级别的缓存

第一级别的缓存是会话级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预

第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围的缓存

<强> hibernate的缓存可以分为两类:

内置缓存:hibernate自带的,不可卸载。通常在Hibernate的初始化阶段,Hibernate会把映射元数据和预定义的SQL语句放到SessionFactory的缓存中,映射元数据是映射文件中数据的复制,而预定义SQL语句时Hibernate根据映射元数据推到出来的。该内置缓存是只读的。

外置缓存(二级缓存):一个可配置的缓存插件。在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存中的数据是数据库数据的复制,外置缓存的物理介质可以是内存或硬盘

 hibernate在java中使用如何实现二级缓存

<强>二、理解二级缓存的并发访问策略

 hibernate在java中使用如何实现二级缓存

<强>三,配置进程范围内的二级缓存(配置ehcache缓存)

1拷贝ehcache-1.5.0。jar到当前工程的自由目录下

依赖backport-util-concurrent和通用日志

2开启二级缓存

& lt;属性名=癶ibernate.cache.use_second_level_cache"祝辞true

3要指定缓存的供应商

 & lt;属性名=癶ibernate.cache.provider_class"比;
  org.hibernate.cache.EhCacheProvider 

4指定使用二级缓存的类

方法一在使用类的* pojo所用的. hbm。xml配置

选择需要使用二级缓存的持久化类,设置它的二级缓存的并发访问策略,& lt; class>元素的缓存子元素表明Hibernate会缓存对象的简单属性,但不会缓存集合属性,若希望缓存集合属性中的元素,必须在& lt; set>元素中加入& lt; cache>子元素

方法二,在hibernate.cfg.xml文件中配置(建议)

 

5,配置ehcache默认的配置文件ehcache.xml(名字固定)(放在类路径下)

& lt; ehcache xmlns: xsi=癶ttp://www.w3.org/2001/XMLSchema-instance"xsi: noNamespaceSchemaLocation=? ./config/ehcache.xsd"比;      & lt; diskStore路径=癱:/ehcache"/比;   & lt; defaultCache   maxElementsInMemory=?”;   永恒的=癴alse"   timeToIdleSeconds=?20”;   timeToLiveSeconds=?20”;   overflowToDisk=皌rue"   maxElementsOnDisk=?0000000”;   diskPersistent=癴alse"   diskExpiryThreadIntervalSeconds=?20”;   memoryStoreEvictionPolicy=癓RU"/比;   & lt;/ehcache>   

<强>四、测试

包com.sihai.hibernate3.test;
  
  进口java.util.Iterator;
  进口并不知道;
  
  进口org.hibernate.Query;
  进口org.hibernate.Session;
  进口org.hibernate.Transaction;
  进口org.junit.Test;
  
  进口com.sihai.hibernate3.demo1.Customer;
  进口com.sihai.hibernate3.demo1.Order;
  进口com.sihai.utils.HibernateUtils;
  
  公开课HibernateTest6 {
  
  @Test//查询缓存的测试
  公共空间demo9 () {
  会议会话=HibernateUtils.getCurrentSession ();
  事务tx=session.beginTransaction ();
  
  查询查询=session.createQuery(“从客户选择c.cname c");//使用查询缓存:
  query.setCacheable(真正的);
  query.list ();
  
  tx.commit ();
  
  会话=HibernateUtils.getCurrentSession ();
  tx=session.beginTransaction ();
  
  查询=session.createQuery(“从客户选择c.cname c");
  query.setCacheable(真正的);
  query.list ();
  
  tx.commit ();
  }
  
  @SuppressWarnings (“unused")
  @Test//更新时间戳
  公共空间demo8 () {
  会议会话=HibernateUtils.getCurrentSession ();
  事务tx=session.beginTransaction ();
  
  客户客户=(客户)session.get(客户。类,2);
  session.createQuery(“更新客户设置cname=& # 39;奶茶& # 39;cid=2“) .executeUpdate ();
  
  tx.commit ();
  
  会话=HibernateUtils.getCurrentSession ();
  tx=session.beginTransaction ();
  
  客户customer2=(客户)session.get(客户。类,2);
  
  tx.commit ();
  }
  
  @SuppressWarnings (“all")
  @Test//将内存中的数据写到硬盘
  公共空间demo7 () {
  会议会话=HibernateUtils.getCurrentSession ();
  事务tx=session.beginTransaction ();
  
  List

hibernate在java中使用如何实现二级缓存