MyBatis一级缓存是SqlSession级私有缓存,默认开启,同会话内重复查询直接返回缓存,执行DML即清空;二级缓存是Mapper级共享缓存,需手动配置,commit后写入,DML操作清空对应namespace全部缓存。

MyBatis 一级缓存和二级缓存,是它内置的两层本地缓存机制,核心目标很实在:减少重复 SQL 查询、降低数据库压力、提升读取性能。它们不是可有可无的附加功能,而是影响数据一致性与系统行为的关键设计点,用对了提效,用错了容易出脏数据。
一级缓存默认开启,无需配置,作用域严格限定在**同一个 SqlSession 实例内**。它底层是一个 PerpetualCache(本质是 HashMap),由 SqlSession 内部的 Executor 持有。
二级缓存作用域是 **Mapper 的 namespace**,多个 SqlSession 可以共享同一份缓存数据,但需要手动开启,且有明确前提条件。
<setting name="cacheEnabled" value="true"></setting>
<cache></cache> 或 <cache-ref></cache-ref>
Serializable 接口(因缓存需序列化存储)close() 或 commit() 后,查询结果才会真正写入二级缓存;未提交的查询不参与二级缓存写入当一个查询发起时,MyBatis 的实际查找路径是:先查二级缓存 → 再查一级缓存 → 最后查数据库。写入则相反:结果先存一级缓存,commit/close 后再同步到二级缓存。
缓存不是银弹。适合缓存的数据通常具备这些特征:读多写少、实时性要求不高、变更影响范围可控。
基本上就这些。缓存机制不复杂,但细节决定成败——尤其是失效时机和作用域边界,稍不注意就会埋下数据不一致的隐患。
以上就是MyBatis一级二级缓存是什么 MyBatis缓存机制详解【分析】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号