Hibernate二级缓存 --Hibernate框架
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框架相关推荐
- Hibernate二级缓存的使用
1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...
- Hibernate 二级缓存使用
1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...
- Hibernate EHCache - Hibernate二级缓存
Hibernate EHCache - Hibernate二级缓存 欢迎使用Hibernate二级缓存示例教程.今天我们将研究Hibernate EHCache,它是最受欢迎的Hibernate二级缓 ...
- HibernateEHCache –Hibernate二级缓存
Welcome to the Hibernate Second Level Cache Example Tutorial. Today we will look into Hibernate EHCa ...
- ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存
ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate : Hibernate是一个持久层框架,经常访问物理数据库 ...
- spring boot集成ehcache 2.x 用于hibernate二级缓存
spring boot集成ehcache 2x 用于hibernate二级缓存 项目依赖 Ehcache简介 hibernate二级缓存配置 ehcache配置文件 ehcache事件监听 注解方式使 ...
- Spring中启用Hibernate二级缓存步骤
1.在applicationContext.xml配置文件中SessionFactory bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...
- Hibernate 二级缓存
Hibernate 缓存 •缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提 ...
- 配置Hibernate二级缓存步骤
配置Hibernate二级缓存步骤: 加入二级缓存的jar包及配置文件 jar包位置:hibernate-release-4.1.8.Final\lib\optional\ehcache下所有jar包 ...
最新文章
- 如何高效推进ML模型开发和部署?Uber机器学习平台Michelangelo实践
- jQuery的效果方法
- 二分搜索法 C++代码实现 恋上数据结构笔记
- 如何监控mysql主从之间的延迟
- IDEA使用lombok时warn:Generating equals/hashCode implementation but without a call to superclass
- ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器
- 人脸检测之Haar分类器方法
- python日期转化利器arrow实践
- postSQL使用存储过程动态查询
- 人脸识别接口_人脸识别双目摄像头模组应用系统
- wamp mysql 端口_Wamp修改端口的方法
- android 9指纹认证_Android指纹认证教程
- Python 基于Rawpy 索尼A73 RAW文件转为JPG功能实现
- studio 3t 如何链接开启验证的mongodb
- Webyog Sqlyog Ultimate_12.5.1最新版完美破解(带注册码)
- 红帽子linux网络播放器,redhat默认播放器(totem)解码包安装
- 基于STM32F1系列和LDV5语音模块的语音控制LCD屏幕的点亮
- 游戏服务器是什么 游戏服务器的特点 游戏服务器选择配置
- 日常运维1w、vmstat、
- Asp.NET Core 加载静态文件404