💡
原文中文,约7100字,阅读约需17分钟。
📝
内容提要
本文讨论了MyBatis的一级缓存,重点介绍其实现原理、作用范围及失效机制。一级缓存基于SqlSession,不同SqlSession间不共享,主要用于减少重复查询,提高性能。执行插入、删除或更新操作会导致缓存失效,一级缓存存储对象引用,若修改对象,后续查询将返回修改后的数据,可能导致脏读。
🎯
关键要点
- 一级缓存的生效范围是SqlSession级别,不同SqlSession间不共享缓存。
- 一级缓存默认启用,主要用于减少同一查询SQL会话中的重复查询,提高性能。
- 执行插入、删除或更新操作会导致一级缓存失效。
- 一级缓存存储的是对象的引用,若对对象进行修改,后续查询将返回修改后的数据,可能导致脏读。
- 一级缓存的实现依赖于BaseExecutor中的PerpetualCache,实际上是一个HashMap。
❓
延伸问答
MyBatis的一级缓存是什么?
MyBatis的一级缓存是基于SqlSession的缓存,不同SqlSession间不共享,主要用于减少同一查询SQL会话中的重复查询,提高性能。
一级缓存的失效机制是什么?
执行插入、删除或更新操作会导致一级缓存失效,此外,当SqlSession关闭时,一级缓存也会被清空。
一级缓存存储的数据是什么类型?
一级缓存存储的是对象的引用,如果对对象进行修改,后续查询将返回修改后的数据,可能导致脏读。
如何清空MyBatis的一级缓存?
可以通过执行带有flushCache=true标签的SQL语句来清空一级缓存,或者调用sqlSession#clearCache方法。
一级缓存的生效范围是什么?
一级缓存的生效范围是SqlSession级别,不同SqlSession之间不共享缓存。
MyBatis的一级缓存是如何实现的?
一级缓存的实现依赖于BaseExecutor中的PerpetualCache,实际上是一个HashMap。
➡️