千家信息网

Hibernate缓存

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,一、Hibernate缓存概述Hibernate中提供两个级别的缓存,一级缓存和二级缓存。1.一级缓存是Session级别的缓存,它属于事物范围的缓存,一级缓存有hibernate进行管理。2.二级缓
千家信息网最后更新 2024年11月23日Hibernate缓存

一、Hibernate缓存概述

Hibernate中提供两个级别的缓存,一级缓存和二级缓存。

1.一级缓存是Session级别的缓存,它属于事物范围的缓存,一级缓存有hibernate进行管理。

2.二级缓存是sessionFactory级别的缓存,它属于进程范围的缓存,二级缓存又可分为"内置缓存"和"外置缓存",内置缓存:是hibernate在创建sessionFactory时会加载.hbn.xml文件并会在内存中初始化一些默认的sql语句,该内置缓存是只读的;外置缓存(二级缓存),默认sessionFactory不会启动这个缓存插件,外置缓存中的数据是数据库中数据的复制,存储的物理介质可以是内存或者硬盘。

二、Hibernate一级缓存

session的缓存有两大作用:

1.减少访问数据库的频率。

2.保证数据库中的相关记录与缓存中的相关对象保持一致。

Session根据脏对象的最新属性执行相关SQL语句,从而保证了数据库中的相关记录与缓存中的响应对象的同步,默认在如下时间点,session会清理缓存:

1.应用程序调用Transaction的commit()方法时,commit()会先清理缓存,再向数据库提交事务。

2.应用程序执行一些查询操作,缓存中的持久化对象的属性发生变化时。

3.显式调用Session的flush()方法。

Session提供了两个管理缓存的方法:

1.evict(Object obj);从缓存中清除特定持久化对象。

2.clear();清空缓存中,所有持久化对象。

三、Hibernate二级缓存

1. 使用 Hibernate 二级缓存的步骤:

1). 加入二级缓存插件的 jar 包及配置文件:

I. 复制 \hibernate-release-4.2.4.Final\lib\optional\ehcache\*.jar 到当前 Hibrenate 应用的类路径下.
II. 复制 hibernate-release-4.2.4.Final\project\etc\ehcachexml 到当前 WEB 应用的类路径下

2). 配置 hibernate.cfg.xml下载

I. 配置启用 hibernate 的二级缓存
true

II. 配置hibernate二级缓存使用的产品
org.hibernate.cache.ehcache.EhCacheRegionFactory

III. 配置对哪些类使用 hibernate 的二级缓存


实际上也可以在 .hbm.xml 文件中配置对哪些类使用二级缓存, 及二级缓存的策略是什么.下载

2). 集合级别的二级缓存的配置

I. 配置对集合使用二级缓存

也可以在 .hbm.xml 文件中进行配置







II. 注意: 还需要配置集合中的元素对应的持久化类也使用二级缓存! 否则将会多出 n 条 SQL 语句.

3). ehcache 的 配置文件: ehcache.xml

4). 查询缓存: 默认情况下, 设置的缓存对 HQL 及 QBC 查询时无效的, 但可以通过以下方式使其是有效的

I. 在 hibernate 配置文件中声明开启查询缓存

true

II. 调用 Query 或 Criteria 的 setCacheable(true) 方法
@Test
public void testQueryCache(){
Query query = session.createQuery("FROM Employee");
query.setCacheable(true);

List emps = query.list();
System.out.println(emps.size());

emps = query.list();
System.out.println(emps.size());

Criteria criteria = session.createCriteria(Employee.class);
criteria.setCacheable(true);
}
III. 查询缓存依赖于二级缓存(使用查询缓存的前提是配置hibernate二级缓存)

示例:下载





0