Mybatis 一级缓存和二级缓存
文章目录
- 前言
- 一级缓存
- 二级缓存
- Mybatis内部实现的Cache
- 参考
前言
MyBatis是常见的Java数据库访问层框架。
在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患,所以更多的会集成第三方Cache,例如Ehrcache等。
一级缓存
Mybatis的一级缓存不需要任何配置,在每一个 SqlSession
当中都有一个一级缓存区,作用范围是 SqlSession 。
简单来讲,如果同一个数据库会话,连续执行了完全相同的查询操作,那么缓存将大大提高效率。
每个SqlSession中持有了Executor
,每个Executor中有一个LocalCache
。当用户发起查询时,MyBatis根据当前执行的语句生成MappedStatement
,在Local Cache进行查询,如果缓存命中的话,直接返回结果给用户,如果缓存没有命中的话,查询数据库,结果写入Local Cache
二级缓存
Mybatis 的二级缓存需要手动开启才能启动,与一级缓存的最大区别就在于二级缓存的作用范围比一级缓存大,二级缓存是多个 sqlSession
可以共享一个 Mapper
的二级缓存区域。
二级缓存作用的范围是 Mapper 中的同一个命名空间(namespace)的 statement 。在配置文件默认开启了二级缓存的情况下,如果每一个 namespace 都开启了二级缓存,则都对应有一个二级缓存区,同一个 namespace 共用一个二级缓存区。
当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。
Mybatis内部实现的Cache
这些mybatis实现的缓存,都实现了cache
接口
参考
https://blog.csdn.net/qq_24598601/article/details/83046468
还没有评论,来说两句吧...