一级缓存

一级缓存的机制

首先,一级缓存是sqlSession级别的,也就是在一个sqlSession中如果进行了多次重复的sql查询操作,实际上除了第一次后面都是从缓存中获取的(这里只讲解一级缓存 默认二级缓存关闭).当然如果我们对数据进行了增删改操作以及事务提交关闭就会刷新缓存,一级缓存的数据结构是一个hashMap.下面演示一下效果


无更新操作
结果


新增更新操作


结果展示

我们可以看出三点:

1) 连续两次查询同一数据第一次会去数据库中查询,后面会直接从缓存中取值.

2)从缓存中取值的对象是同一个对象

3)进行更新操作后 会刷新缓存 从数据库从新取值


一级缓存流程

源码分析

首先我们带着问题进行分析

一级缓存到底是什么?一级缓存什么时候被创建、一级缓存的工作流程是怎样的?

查询流程剖析

mybatis中所有的查询基本都是走Sqlsession.selectList方法 所以我们只需要找其中有关缓存的方法即可

缓存流程

源码分析

首先一级缓存的 数据结构是hashMap证明

我们可以直接从execute.query中查看

execute.query缓存操作
查询后插入一级缓存

从源码中还可以看出当LocalCacheScope属性设置为STATEMENT时候查询也是会清空缓存的

LocalCacheScope配置相关

进行更新操作时候 缓存也会清空


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容