由 Mybatis 源码畅谈软件设计(七):从根上理解 Mybatis 一级缓存
💡
原文中文,约7100字,阅读约需17分钟。
📝
内容提要
本文介绍了MyBatis中一级缓存的实现原理,包括生效范围和失效条件。一级缓存基于SqlSession,不同SqlSession之间不共享,主要用于减少重复查询以提高性能。执行插入、删除和更新操作会导致缓存失效,缓存存放的是对象引用,修改后会影响后续查询结果。
🎯
关键要点
- 本文介绍了MyBatis中一级缓存的实现原理,包括生效范围和失效条件。
- 一级缓存基于SqlSession,不同SqlSession之间不共享,主要用于减少重复查询以提高性能。
- 执行插入、删除和更新操作会导致缓存失效,缓存存放的是对象引用,修改后会影响后续查询结果。
- 一级缓存的生效范围是SqlSession级别,默认情况下是启用的。
- 一级缓存的实现依赖于PerpetualCache,使用HashMap存储数据。
- 一级缓存失效的场景包括执行Insert、Delete、Update语句和调用sqlSession#clearCache方法。
- 在同一个SqlSession中,如果对缓存中返回的对象进行了修改,后续查询将返回修改后的数据,可能导致脏读。
➡️