一、一级缓存的介绍
一级缓存:又称为session级别的缓存(缓存的是持久化对象)。当获得一次会话(session),hibernate在session中创建多个集合(map),用于存放操作数据(PO对象),为优化程序服务,如果之后需要相应的数据,hibernate优先从session缓存中获取,如果有就直接使用;如果没有再从数据库中查询。当session关闭时,一级缓存销毁。Hibernate中的缓存是用来提高效率的,可以减少与数据库交互的次数。
二、证明一级缓存的存在
package com.zju.BJ; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.zju.model.User; public class 一级缓存 { // 证明一级缓存的存在 // 1 加载配置文件获得核心配置对象 Configuration config = new Configuration().configure(); // 2 获得工厂 SessionFactory 相当于连接池 SessionFactory factory = config.buildSessionFactory(); // 3 获得会话session,相当于连接Connection Session session = factory.openSession(); // 4 开启事务 Transaction ts = session.beginTransaction(); //1 查询id=1 User user1 = (User) session.get(User.class, 1); //2 再查询时,不执行select语句,直接从一级缓存中获取 User user2 = (User) session.get(User.class, 1); session.getTransaction().commit(); Session.close(); }
三、一级缓存的相关操作
1、清除一级缓存
session.clear(); //清空一级缓存
session.evict(user) //将缓存中的对象移除
2、刷新refrsh
session.refresh(user);
refresh保证一级缓存中的数据与数据库中的数据保持一致,将执行select语句查询数据库,降一级缓存中的数据覆盖掉。只要执行refresh都将执行select语句。
一级缓存默认是在提交(commit)时刷新。
四、一级缓存快照
快照:与一级缓存一样的存放位置,对一级缓存数据备份。为了对比缓存中的对象是否发生变化,决定事务提交时是否需要修改数据。