二级缓存的概念
- 二级缓存:sessionFactory级别缓存,整个应用程序共享一个会话工厂,共享一个二级缓存。
- SessionFactory的缓存两部分:
- 内置缓存:使用一个Map,用于存放配置信息,预定义HQL语句等,提供给Hibernate框架自己使用,对外只读的。不能操作。
- 外置缓存:使用另一个Map,用于存放用户自定义数据。默认不开启。外置缓存hibernate只提供规范(接口),需要第三方实现类。外置缓存有成为二级缓存。
- 缓存中的数据要求:
- 经常使用
- 不经常被修改
- 二级缓存的内部结构:
- 类级别缓存
- 集合级别缓存
- 时间戳缓存
- 查询缓存
- 二级缓存在缓存数据时,并不是以对象的形式缓存. 缓存的是对象数据的散列. 每次从二级缓存拿 会在一级缓存中组装成对象.
二级缓存的配置
-
导入jar包
-
hibernate.hbm.xml中开启二级缓存
-
确定缓存的内容(在mapping后面)
-
使用查询缓存
@Test
//演示:查询缓存
// 对hql语句查询的缓存
public void fun1(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
//------------------------------------------------
Query query = session.createQuery("from Customer");
//使用二级(查询)缓存
// 查询时,会先从二级缓存中取结果.
// 取不到就执行语句,将结果放入二级查询缓存中
query.setCacheable(true);
List<Customer> list = query.list();
session.clear();
Query query2 = session.createQuery("select c from Customer c");
query2.setCacheable(true);
List<Customer> list2 = query2.list();
//------------------------------------------------
session.getTransaction().commit();
session.close(); // 游离状态
}