Hibernate 5.2.12 二级缓存配置及案例

1,Hibernate 缓存简介

       Hibernate中提供了 二级缓存,一级缓存是Session级别的缓存,它属于事物范围的缓存,该缓存由Hibernate管理,程序无需干涉,二级缓存是SessionFactory级别的缓存该缓存可以配置和更改,是一种可插配的缓存框架,如果用户想使用则在主配置文件hibernate.cfg.xml配置即可,不想使用则直接移除即可。因为SessionFactory对象的生命周期和整个应用过程相对应,所以不同的session都可以访问该缓存中的数据。

2,Hibernate 二级缓存的详细配置

1,导入所需的jar包

       hibernate-release-5.2.12.Final包中的lib文件夹下required文件夹中的所有jar包和optional文件夹中ehcache文件夹的所有jar包和相应的数据库驱动包。如下图:



2,Major类设计

package reflect_one_many;

import java.util.HashSet;
import java.util.Set;

public class Major {
	private int majorId;
	private String majorName;
	private Set<Student> stu = new HashSet<Student>();
	
	public int getMajorId() {
		return majorId;
	}
	public void setMajorId(int majorId) {
		this.majorId = majorId;
	}
	public String getMajorName() {
		return majorName;
	}
	public void setMajorName(String majorName) {
		this.majorName = majorName;
	}
	public Set<Student> getStu() {
		return stu;
	}
	public void setStu(Set<Student> stu) {
		this.stu = stu;
	}
}

3.Major类映射文件配置

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="reflect_one_many">
	<class name="Major" table="major" >
		<id name="majorId" column="majorId">
		    <generator class="native"/>
		</id>
		<property name="majorName" column="majorName" type="string" length="20"/>
		<set name="stu" table="student" inverse="false" cascade="save-update">
		     <key column="majorId"></key>
		     <one-to-many class="Student" />
		</set>	
	</class>
</hibernate-mapping>

4,主配置文件hibernate.cfg.xml的配置

<!-- 二级缓存配置 -->
<!--开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定使用哪一个缓存框架 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property> 
<!-- 指定哪些类要加入二级缓存 -->
<class-cache usage="read-write" class="reflect_one_many.Major"/>
<class-cache usage="read-write" class="reflect_one_many.Student"/>
<!-- 集合缓存 -->
<collection-cache usage="read-only" collection="reflect_one_many.Major.stu"/>

5,二级缓存的案列

        @Test
	public void cacheDemo() {
		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
		Major major = session.get(Major.class, 1);
		System.out.println(major);
		tx.commit();
		session.close();
		
		System.out.println("====================");
		
		Session session1 = sessionFactory.openSession();
		Transaction tx1 = session1.beginTransaction();
		Major major2 = session1.get(Major.class, 1);
		System.out.println(major2);
		tx1.commit();
		session1.close();
	}

6,结果如图所示


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值