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




我们可以看出三点:
1) 连续两次查询同一数据第一次会去数据库中查询,后面会直接从缓存中取值.
2)从缓存中取值的对象是同一个对象
3)进行更新操作后 会刷新缓存 从数据库从新取值

源码分析
首先我们带着问题进行分析
一级缓存到底是什么?一级缓存什么时候被创建、一级缓存的工作流程是怎样的?
查询流程剖析
mybatis中所有的查询基本都是走Sqlsession.selectList方法 所以我们只需要找其中有关缓存的方法即可

源码分析
首先一级缓存的 数据结构是hashMap证明

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


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

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

网友评论