MyBatis 中存在一级缓存和二级缓存两种缓存机制:

一级缓存(Local Cache)

  • 作用范围: 一级缓存是指在同一个 SqlSession 内部的缓存。在同一个 SqlSession 中执行的多次查询操作,查询的数据会被缓存在一级缓存中。

  • 生命周期: 缓存的生命周期与 SqlSession 相同。即当 SqlSession 关闭(commit 或 rollback)时,一级缓存也会被清空。

  • 优点: 提供了较为快速的数据访问,避免了重复查询数据库的开销。

二级缓存(Global Cache)

  • 作用范围: 二级缓存是多个 SqlSession 共享的缓存。不同的 SqlSession 可以共享同一个 Mapper 下的二级缓存。

  • 生命周期: 二级缓存与 SqlSessionFactory 相关联,当应用程序关闭时,二级缓存才会被清空。

  • 配置: 需要在 Mapper XML 文件中通过 <cache> 标签进行配置和启用二级缓存。

<!-- 在 Mapper XML 中启用二级缓存 -->
<cache/>
  • 优点: 在多个 SqlSession 中共享缓存数据,可以提高数据的访问效率,尤其适用于跨 SqlSession 、跨 SessionFactory 的数据共享场景。

使用注意:

  • 缓存策略: MyBatis 默认开启一级缓存,对于需要使用二级缓存的情况,需要在 Mapper XML 中配置启用。需要根据实际情况慎重考虑是否启用缓存,因为缓存可能造成数据一致性问题。

  • 缓存清理: 在某些数据更新操作后,需要手动清理缓存以确保缓存数据的一致性。可以通过 clearCache() 方法清空一级缓存或者二级缓存。

这两种缓存机制可以提高查询效率,但也需要开发者根据实际场景和数据一致性的需求合理使用和配置。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.