SSH与SSM学习之hibernate11——hibernate的二级缓存
2017-09-17 17:35
387 查看
SSH与SSM学习之hibernate11hibernate的二级缓存
一一级缓存解决不了多个session的问题
二二级缓存
三二级缓存配置步骤
1 添加二级缓存对应的jar包
2 在hibernate的主配置文件中添加配置
3 添加二级缓存的属性配置文件
4 在需要被缓存的表所对应的映射文件中添加标签
四标签说明
1 usage
2 include
3 region
五代码测试
1 测试代码
2 没有二级缓存的结果
3 有二级缓存的结果
二级缓存又称为“全局缓存”、“应用缓存”
二级缓存中的数据可适用范围是当前应用程序的所有回话
二级缓存是可插拔式缓存,默认是 EHCache,还支持其他二级缓存组件
例如:Hashtable、OSCache、SwarmCache、JBoss TreeCache等
例如我们的是
不能缺少任何一个包哦。如果缺少了 hibernate-ehcache-5.2.11.Final.jar,会出现下面的错误
Hibernate 4.0及以后
Hibernate 3.3
这个具体含义可以查看
详解Hibernate中的二级缓存
体的属性可能无法被
级缓存的区域名(name of the second level cache region)
在 ehcache.xml 配置
一一级缓存解决不了多个session的问题
二二级缓存
三二级缓存配置步骤
1 添加二级缓存对应的jar包
2 在hibernate的主配置文件中添加配置
3 添加二级缓存的属性配置文件
4 在需要被缓存的表所对应的映射文件中添加标签
四标签说明
1 usage
2 include
3 region
五代码测试
1 测试代码
2 没有二级缓存的结果
3 有二级缓存的结果
SSH与SSM学习之hibernate11——hibernate的二级缓存
一、一级缓存解决不了多个session的问题
比如现在我们查询的数据,基本是不变的,在一级缓存(session缓存)下,我们如果是同一个session,那么有数据被缓存,但是如果我们是多个session的话,那么我们还是会多次去访问数据。然而由于数据是不变的,我们完全没必要呀。我们想要实现的就是多个session也能够直接使用,而不去查询,这样我们的二级缓存就来了。二、二级缓存
二级缓存是SessionFactory级别的缓存,是属于进程范围的缓存。二级缓存又称为“全局缓存”、“应用缓存”
二级缓存中的数据可适用范围是当前应用程序的所有回话
二级缓存是可插拔式缓存,默认是 EHCache,还支持其他二级缓存组件
例如:Hashtable、OSCache、SwarmCache、JBoss TreeCache等
三、二级缓存配置步骤
3.1 添加二级缓存对应的jar包
在我们下载的 hibernate 的文件中,有个路径是 lib\optional\ehcache,导入里面的jar包.例如我们的是
ehcache-2.10.3.jar hibernate-ehcache-5.2.11.Final.jar slf4j-api-1.7.7.jar
不能缺少任何一个包哦。如果缺少了 hibernate-ehcache-5.2.11.Final.jar,会出现下面的错误
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.cache.ehcache.EhCacheRegionFactory] as strategy [org.hibernate.cache.spi.RegionFactory ..........
3.2 在hibernate的主配置文件中添加配置
我们需要在hibernate.cfg.xml中添加相应的配置,我们需要添加如下配置。Hibernate 4.0及以后
<!--配置二级缓存的外部实现类--> <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property> <!--开启二级缓存--> <property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
Hibernate 3.3
<property name="hibernate.cache.use_second_level_cache">true</property> <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
3.3 添加二级缓存的属性配置文件
导入的 ehcache.xml 到 src下3.4 在需要被缓存的表所对应的映射文件中添加标签
下载我们需要在我们需要使用二级缓存的配置文件中加入 标签。如下<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.qwm.hibernate02"> <class name="User" table="tb_user2"> <!--二级缓存配置--> <cache usage="read-only" include="all" region="User"></cache> <id name="id"> <!--id自增--> <generator class="increment"></generator> </id> <property name="name"/> <property name="age"/> </class> </hibernate-mapping>
四、标签说明
4.1 usage
usage:指定缓存策略,可选的策略是包括:transactional,read-write、nonstrict-read-write或read-only这个具体含义可以查看
详解Hibernate中的二级缓存
4.2 include
include(可选,默认为 all) non-lazy 当属性级延迟抓取打开时,标记为 lazy=”true” 的实体的属性可能无法被
4.3 region
region (可选,默认为类或者集合的名字(class or collection role name)) 指定第二级缓存的区域名(name of the second level cache region)
在 ehcache.xml 配置
五、代码测试
5.1 测试代码
/** * 二级缓存,我们使用多个session来查询数据 */ @Test public void cacheTest1(){ //1.创建session Session session = HibernateUtils.openSession(); //2.获取到数据 User user1 = session.get(User.class,1); System.out.println(user1); //3.创建新的session session = HibernateUtils.openSession(); //4.获取数据 User user2 = session.get(User.class,1); System.out.println(user2); //5.关闭资源 session.close(); }
5.2 没有二级缓存的结果
Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.age as age3_0_0_ from tb_user2 user0_ where user0_.id=? User{id=1, name='小明', age=20} Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.age as age3_0_0_ from tb_user2 user0_ where user0_.id=? User{id=1, name='小明', age=20}
5.3 有二级缓存的结果
Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.age as age3_0_0_ from tb_user2 user0_ where user0_.id=? User{id=1, name='小明', age=20} User{id=1, name='小明', age=20}
相关文章推荐
- SSH与SSM学习之hibernate03——主配置详解
- SSH与SSM学习之hibernate07——Transaction
- SSH与SSM学习之hibernate14——Criteria查询
- hibernate学习之旅之二级缓存
- SSH与SSM学习之hibernate24——关联级别加载策略之属性关联加载策略
- Hibernate中 一 二级缓存及查询缓存的学习总结
- SSH与SSM学习之hibernate21——离线查询
- SSH与SSM学习之hibernate23——关联级别加载策略之集合关联加载策略
- hibernate二级缓存配置学习记录
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
- SSH与SSM学习之hibernate01——介绍与环境搭建
- SSH与SSM学习之hibernate18——多对一一对多级联操作
- ssh学习:hibernate中 Session缓存及基本操作
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
- Spring视频学习(十三)配置Hibernate的二级缓存
- Hibernate学习_020_一级缓存+二级缓存+三级缓存(查询缓存)
- Hibernate中 一 二级缓存及查询缓存学习总结
- hibernate学习:QBC及二级缓存
- Hibernate学习之二级缓存
- [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存