关于Mybatis中的一级缓存,以及二级缓存的初步了解

1. mybatis 中一级缓存的作用域:
获取到sqlSession 后到sqlSession.close()

2.mybatis中的二级缓存的作用域:

相当于在一个mapper 中

一级缓存:

一级缓存默认是开启状态,且当执行增删改操作时 会刷新缓存,

当我们执行一个查询语句:

select * from test where id =1

1.第一次查询由于一级缓存中没有该缓存,会通过数据库查询出结果,写入缓存中,再次执行该查询语句则不通过数据库查询,会直接从缓存中取数据。(只针对id 为1 )

2.当我们第一次查询id = 1, 后再次执行查询 id =2,由于缓存中并没有保存 id= 2 的查询结果,则会在数据库中进行查询。

3.当执行完 第一次id = 1 的查询后 我们执行了一次 增\删\改的操作时,再次查询id =1 的时候会发型 重新在数据库中进行了查询,证明:执行增删改操作时 会刷新缓存,

二级缓存:(注意:必须实现序列化)

1.二级缓存需要手动开启,且 二级缓存比一级缓存的作用域更大,可以被对个sqlSession 公用

2.一个sqlSession 会使用Executor对象完成会话操作,那么二级缓存就是在Executor上面做文章,

首先在Executor加上一个装饰者(CachingExecutor),访问就会使用这个装饰者完成操作,首相会判断二级缓存中是否有该查询结果,如果有的话,直接返回缓存结果;

如果缓存中没有,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到二级缓存中,然后在返回给用户。

一级缓存与二级缓存使用顺序

MyBatis使用了二级缓存,并且你的Mapper和select语句也配置使用了二级缓存,那么在执行select查询的时候,MyBatis会先从二级缓存中取输入,其次才是一级缓存

 

posted @   PointerNUll..M  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示