由 Mybatis 源码畅谈软件设计(七):从根上理解 Mybatis 一级缓存

💡 原文中文,约8200字,阅读约需20分钟。
📝

内容提要

本文介绍了MyBatis的一级缓存,包括其实现原理、生效范围和失效机制。一级缓存基于SqlSession,不同SqlSession之间不共享,主要用于减少重复查询以提高性能。缓存存储对象引用,修改后会影响后续查询结果,可能导致脏读。执行插入、删除和更新操作会使一级缓存失效。

🎯

关键要点

  • 本文介绍了MyBatis的一级缓存,包括实现原理、生效范围和失效机制。

  • 一级缓存基于SqlSession,不同SqlSession之间不共享,主要用于减少重复查询以提高性能。

  • 一级缓存的生效范围是SqlSession级别,默认情况下是启用的。

  • 执行插入、删除和更新操作会使一级缓存失效。

  • 一级缓存存储的是对象的引用,修改后会影响后续查询结果,可能导致脏读。

  • 一级缓存的实现依赖于PerpetualCache,使用HashMap存储数据。

  • 在同一SqlSession中,如果对缓存中返回的对象进行了修改,后续查询将返回修改后的数据,而不是数据库中的最新数据。

延伸问答

MyBatis的一级缓存是什么?

MyBatis的一级缓存是基于SqlSession实现的,不同SqlSession之间不共享,主要用于减少重复查询以提高性能。

一级缓存的生效范围是什么?

一级缓存的生效范围是SqlSession级别,默认情况下是启用的。

执行哪些操作会导致一级缓存失效?

执行插入、删除和更新操作会使一级缓存失效。

一级缓存存储的数据是什么?

一级缓存存储的是对象的引用,修改后会影响后续查询结果,可能导致脏读。

如何清除MyBatis的一级缓存?

可以通过执行带有flushCache=true的SQL语句或调用sqlSession#clearCache方法来清除一级缓存。

MyBatis的一级缓存是如何实现的?

一级缓存的实现依赖于PerpetualCache,使用HashMap存储数据。

➡️

继续阅读