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