Hibernate学习笔记(十)二级缓存

二级缓存的概念

  1. 二级缓存:sessionFactory级别缓存,整个应用程序共享一个会话工厂,共享一个二级缓存。
  2. SessionFactory的缓存两部分:
    • 内置缓存:使用一个Map,用于存放配置信息,预定义HQL语句等,提供给Hibernate框架自己使用,对外只读的。不能操作。
    • 外置缓存:使用另一个Map,用于存放用户自定义数据。默认不开启。外置缓存hibernate只提供规范(接口),需要第三方实现类。外置缓存有成为二级缓存。
  3. 缓存中的数据要求:
    • 经常使用
    • 不经常被修改
      在这里插入图片描述
  4. 二级缓存的内部结构:
    • 类级别缓存
    • 集合级别缓存
    • 时间戳缓存
    • 查询缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 二级缓存在缓存数据时,并不是以对象的形式缓存. 缓存的是对象数据的散列. 每次从二级缓存拿 会在一级缓存中组装成对象.

二级缓存的配置

  1. 导入jar包
    在这里插入图片描述

  2. hibernate.hbm.xml中开启二级缓存
    在这里插入图片描述

  3. 确定缓存的内容(在mapping后面)
    在这里插入图片描述
    在这里插入图片描述

  4. 使用查询缓存

@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(); // 游离状态
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值