MyBatis-缓存

详情

MyBatis 中,存在三种类型的缓存,分别是一级缓存、二级缓存和自定义缓存。

一级缓存

  • 一级缓存:也被称为本地缓存,它是MyBatis中默认开启的缓存机制。一级缓存是与SqlSession绑定的,意味着在同一个SqlSession中执行相同的查询语句时,会直接从缓存中获取结果,而无需再次向数据库发起查询。一级缓存是在默认情况下开启的,且无法禁用。它的作用范围是SqlSession级别的,即同一个SqlSession内的查询会共享缓存,但不同的SqlSession之间的缓存是相互独立的。

二级缓存

  • 二级缓存:也被称为全局缓存,与一级缓存不同,二级缓存是跨SqlSession的缓存机制。它可以缓存多个SqlSession间共享的查询结果,从而避免了重复查询和提升了性能。二级缓存的作用范围是Mapper级别的,即同一个Mapper接口的不同SqlSession之间可以共享缓存。需要注意的是,为了启用二级缓存,需要在Mapper接口的映射文件中进行配置。

自定义缓存

  • 自定义缓存:除了一级缓存和二级缓存外,MyBatis还支持自定义缓存。自定义缓存是指开发者可以根据自己的需求,实现并配置自己的缓存实现。通过实现org.apache.ibatis.cache.Cache接口来创建自己的缓存类,并在配置文件中进行相关配置。

总结

尽管MyBatis内置了一级缓存和二级缓存,但在实际使用中需谨慎使用,避免出现脏数据和内存溢出等问题。在并发环境下,尤其要注意缓存的更新和缓存的失效机制。

关联网络

演化日志

  • v0.1 (2024-09-10):初始版本
  • v0.2 (2026-02-02):补充关联网络、演化日志、待办事项

待办事项

  • SqlSession
  • 脏数据
  • 内存溢出
  • 内容单薄,需要补充内容