关于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会先从二级缓存中取输入,其次才是一级缓存
分类:
mybatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!