Hibernate本身只提供了二级缓存的规范,但并未实现,所以需要第三方缓存插件的支持。常用的二级缓存第三方插件有:EHCache、Memcached、OSCache、SwarmCache、JBossCache。这些插件的功能的侧重均有所不同。下面一图说明了插件的在实际应用中的区别:

本例采用EHCache插件。

1、首先,导入需要EHCache插件相关的Jar包。(可通过Hibernate框架的lib\optional\ehcache目录中找到)

2、修改主配置文件hibernate.cfg.xml:

需要开启二级缓以及注册二级缓存工厂,在hibernate.cfg.xml文件中<session-factory>标签中加入以下代码:

<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 注册二级缓存区工厂 -->
<property name="hibernate.cache.region.factory_class"><!--需要name可在/project/etc目录中的hibernate.properties查找 -->
  org.hibernate.cache.ehcache.EhCacheRegionFactory
</property>

3、添加配置文件ehcache.xml 。

解压ehcache-core-2.4.3.jar

找到ehcacha-failsafe.xml,将其复制到项目中的src目录中,并改名为ehcache.xml

4、再次修改在主配置文件(hibernate.cfg.xml),在主配置文件中指定缓存内容 。

在<mapping/>标签的后面(同样是在<session-factory>标签中)指定类缓存与集合缓存,代码如下:

<!-- 指定类缓存 -->
<class-cache usage="read-only" class="com.beans.Country"/>
<class-cache usage="read-only" class="com.beans.Minister"/>
<!-- 指定集合缓存 -->
<collection-cache usage="read-only" collection="com.beans.Country.ministers"/>

5、以1:n的Country与Minister关联关系为例,演示二级缓存实例。首先,需要插入相关数据,在测试类中写插入数据的方法。

MyTest.java:

@Test
public void test02() {
  Session session = HbnUtils.getSession();
  try {
    session.getTransaction().begin();
    Minister minister1 = new Minister("aaa");
    Minister minister2 = new Minister("bbb");
    Minister minister3 = new Minister("bbb");
    Country country = new Country("America");
    //Country维护关联关系
    country.getMinisters().add(minister1);
    country.getMinisters().add(minister2);
    country.getMinisters().add(minister3);

    session.save(country);
    session.getTransaction().commit();
  } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    session.getTransaction().rollback();
  }
}

6、证明二级缓存的存在。为了证明二级缓存的存在,我这里是对插入的数据进行同样的3次查询。接着上例在MyTest.java中加入测试二级缓存的方法。

MyTest.java:

@Test
public void test03() {
  Session session = HbnUtils.getSession();
  try {
    session.beginTransaction();
    //第一次查询,将id为1的country对象加载到一级缓存session将引发查询(select语句)
    Country country1 = session.get(Country.class, 1);
    System.out.println("第一次查询:Cname=" + country1.getCname());

    //第二次查询:从session(一级缓存)中直接读取到的id为1的Country对象,不会到数据库中查询,不引发查询
    Country country2 = session.get(Country.class, 1);
    System.out.println("第二次查询:Cname=" + country2.getCname());
    //将一级缓存数据清空,session中Country对象也不存在了
    session.clear();

    //第三次查询,从二级缓存中读取id为1 的Country对象,不会到数据库中查询,不引发查询
    Country country3 = session.get(Country.class, 1);
    System.out.println("第三次查询:Cname=" + country3.getCname());
    session.getTransaction().commit();
  } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    session.getTransaction().rollback();
  }
}

执行测试方法后,控制台显示如下结果:

明显可以看出,查询只引发了一次,并且是第一次查询所引发的。在第二次查询时,读取的是一级缓存session中的数据,所以不引发。当一级缓存数据被清空后,再次查询也是没有引发的,也就是说第三次查询是从二级缓存中获取的数据,也就证明是二级缓存的存在。

转载于:https://www.cnblogs.com/qikeyishu/p/9203217.html

Hibernate二级缓存 --Hibernate框架相关推荐

  1. Hibernate二级缓存的使用

    1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...

  2. Hibernate 二级缓存使用

    1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...

  3. Hibernate EHCache - Hibernate二级缓存

    Hibernate EHCache - Hibernate二级缓存 欢迎使用Hibernate二级缓存示例教程.今天我们将研究Hibernate EHCache,它是最受欢迎的Hibernate二级缓 ...

  4. HibernateEHCache –Hibernate二级缓存

    Welcome to the Hibernate Second Level Cache Example Tutorial. Today we will look into Hibernate EHCa ...

  5. ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存

    ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate  : Hibernate是一个持久层框架,经常访问物理数据库 ...

  6. spring boot集成ehcache 2.x 用于hibernate二级缓存

    spring boot集成ehcache 2x 用于hibernate二级缓存 项目依赖 Ehcache简介 hibernate二级缓存配置 ehcache配置文件 ehcache事件监听 注解方式使 ...

  7. Spring中启用Hibernate二级缓存步骤

    1.在applicationContext.xml配置文件中SessionFactory  bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...

  8. Hibernate 二级缓存

    Hibernate 缓存 •缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提 ...

  9. 配置Hibernate二级缓存步骤

    配置Hibernate二级缓存步骤: 加入二级缓存的jar包及配置文件 jar包位置:hibernate-release-4.1.8.Final\lib\optional\ehcache下所有jar包 ...

最新文章

  1. 如何高效推进ML模型开发和部署?Uber机器学习平台Michelangelo实践
  2. jQuery的效果方法
  3. 二分搜索法 C++代码实现 恋上数据结构笔记
  4. 如何监控mysql主从之间的延迟
  5. IDEA使用lombok时warn:Generating equals/hashCode implementation but without a call to superclass
  6. ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器
  7. 人脸检测之Haar分类器方法
  8. python日期转化利器arrow实践
  9. postSQL使用存储过程动态查询
  10. 人脸识别接口_人脸识别双目摄像头模组应用系统
  11. wamp mysql 端口_Wamp修改端口的方法
  12. android 9指纹认证_Android指纹认证教程
  13. Python 基于Rawpy 索尼A73 RAW文件转为JPG功能实现
  14. studio 3t 如何链接开启验证的mongodb
  15. Webyog Sqlyog Ultimate_12.5.1最新版完美破解(带注册码)
  16. 红帽子linux网络播放器,redhat默认播放器(totem)解码包安装
  17. 基于STM32F1系列和LDV5语音模块的语音控制LCD屏幕的点亮
  18. 游戏服务器是什么 游戏服务器的特点 游戏服务器选择配置
  19. 日常运维1w、vmstat、
  20. Asp.NET Core 加载静态文件404

热门文章

  1. Android 自定义漂亮的圆形进度条
  2. Java基础整理(二)
  3. 初识openwrt(上)
  4. element upload预览_vue2.0 使用element-ui里的upload组件实现图片预览效果方法
  5. 【elasticsearch】ES 相似文章检测
  6. 【es】使用ElasticSearch的44条建议 性能优化
  7. 【es】es 写入流程
  8. 【Clickhouse】Clickhouse 外部存储引擎之 File
  9. 【高并发】JUC中的Executor框架详解1
  10. 【Java】Java 的Object对象你真的懂了吗