Hibernate中的缓存

Hibernate中的缓存

一、Hibernate的一级缓存

1.什么是缓存

数据存到数据库里面,数据本身是系统文件,使用流方式操作文件效率不是很高。
(1)把数据存到内存里面,不需要流方式,可以直接读取内存中数据。
(2)把数据放到内存中,提供读取效率。

2.Hibernate缓存

1.hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式
2.hibernate缓存特点
第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认是打开的
(2)hibernate的一级缓存有使用范围,是session的范围,从session创建到关闭的范围
(3)hibernate的一级缓存中,存储数据必须是持久态数据

注:持久态为实体类对象中id有值,且与session相连接的状态
第二类 hibernate的二级缓存
(1)目前已经不使用了,替代技术为redis
(2)二级缓存默认不是打开的,需要配置
(3)二级缓存使用的范围,是sessionFactory的范围

二、验证一级缓存的存在

1.验证方式
(1)首先根据id=1查询,返回对象
(2)其次再根据id=1查询,返回对象

//1.根据id=1查询
//执行第一个get方法时是否会查询数据库,也就是看是否发送sql语句
User user1 = session.get(User.class,1);
//输出user1内容(User类中需重写toString方法)
System.out.println(user1);

//2.再根据id=1查询
//执行第二个get方法时是否会查询数据库,也就是看是否发送sql语句
User user2 = session.get(User.class,1);
System.out.println(user2);

第一步执行get方法之后,发送sql语句查询数据库
第二步执行get方法之后,没有发送sql语句,查询一级缓存内容

三、一级缓存的执行过程

还是上述代码
第一次get方法
1.首先,查询 一级缓存,查询一级缓存没数据,才会去查询数据,返回user1对象(持久态对象)
2.其次,把user1持久态对象放到一级缓存中
第二次get方法
1.查询一级缓存内容,发现一级缓存中有相同的数据,直接返回user2对象

注:一级缓存以id的值作为判断,存储对象的值

四、一级缓存的特性

1.持久态自动更新数据库

//1.根据id查询
User user = session.get(User.class,1);
//2.设置返回对象值
user.setUsername("JERRY");
//3.调用方法实现
//将update方法注释
//session.update(user);

结果:在执行提交事务时,自动进行update
2.执行过程
(1)根据id查询时,把返回user持久态对象放到一级缓存和快照区(副本)里面。
(2)设置返回对象值时,修改user对象里的值、同时修改一级缓存中的内容,但是不会修改一级缓存对应的快照区的内容
(3)提交事务时,比较一级缓存和对应快照区的内容是否相同,如果不想同,把一级缓存中的内容更新到数据库里面。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值