四、hibernate的一级缓存
- 什么是缓存:数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。
(1)把数据存放到内存里面,不需要使用流方式,可以直接读取内存中数据;
(2)把数据放到内存中,提高读取效率。
- hibernate缓存
(1)hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式
(2)hibernate缓存特点:
第一类:hibernate的一级缓存
——hibernate的一级缓存是默认打开的;
——hibernate的一级缓存使用范围,是session的范围。从session创建到session关闭的范围
——hibernate的一级缓存中,存储数据必须 持久态数据。
第二类:hibernate的二级缓存(目前已经不使用,Redis替代)
——二级缓存默认不是打开的,需要配置;
——使用范围:整个项目(SessionFactory的范围)
- 验证一级缓存存在
验证方式:
(1)首先根据uid=1查询,返回对象;
(2)其次再根据uid=1查询,又返回对象;
// 验证一级缓存
@Test
public void testCasch() {
// 1.调用工具类得到SessionFactory
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
// 2.获取session
Session session = sessionFactory.openSession();
// 3.开启事务
Transaction tx = session.beginTransaction();
// 1.根据uid=4查询(看执行第一个get方法是否查询数据库,是否发送SQL语句)
User user1 = session.get(User.class, 4);
System.out.println(user1);
// 2.根据uid=4查询(看执行第一个get方法是否查询数据库,是否发送SQL语句)
User user2 = session.get(User.class, 4);
System.out.println(user2);
// 5.提交事务
tx.commit();
// 6.关闭
session.close();
sessionFactory.close();
}
执行第一个get方法之后,发送SQL语句;执行第二个get方法,没有发送SQL语句。
hibernate一级缓存执行过程
- hibernate一级缓存特性
(1)持久态自动更新数据库
![]() |
![]() |
![]() |
(2)持久态自动更新数据库执行过程(了解)