在 MyBatis 中,存在一级缓存、二级缓存和三级缓存的概念。下面我将为你详细解释这些缓存的含义和作用:
- 一级缓存:
- 一级缓存是 MyBatis 默认开启的缓存机制,它是指在同一个 SqlSession 对象中,执行相同的 SQL 语句时,会将查询结果缓存到内存中。
- 一级缓存的作用范围仅限于当前的 SqlSession,当 SqlSession 关闭后,缓存数据也就被清空。
- 当执行相同的查询操作时,MyBatis 会首先从一级缓存中查找数据,如果找到了则直接返回缓存的结果,避免再次访问数据库。
- 二级缓存:
- 二级缓存是在一个 Mapper 的命令空间(namespace)范围内共享的缓存,可以跨越多个 SqlSession 使用。
- 二级缓存的配置需要在 Mapper XML 文件中进行设置,并且需要手动启用。例如,在 Mapper XML 文件的
<mapper>
标签下添加<cache>
子标签。 - 当执行查询操作时,如果开启了二级缓存并且命中了缓存,则直接返回缓存的结果,而不会访问数据库。
- 默认情况下,二级缓存使用的是 PerpetualCache 类来实现,它使用 HashMap 存储缓存数据。
- 三级缓存:
- 三级缓存是指 MyBatis 通过集成第三方的缓存框架(如 Ehcache)实现的缓存机制。
- 在 MyBatis 中,可以配置使用第三方缓存框架作为二级缓存的实现,从而提供更高效的缓存管理。
- 配置使用第三方缓存框架需要在 MyBatis 的配置文件中进行设置,并且在 Mapper XML 文件中指定缓存的类型和位置。
- 使用三级缓存可以将缓存数据存储到独立的缓存服务器中,提供更好的性能和扩展性。
需要注意的是,尽管缓存可以提升查询性能,但在某些情况下也可能导致数据不一致的问题。因此,在使用缓存时,需要根据具体的业务需求和数据操作特点来合理配置和使用缓存,并且在更新、插入或删除数据时及时清空相应的缓存,以保证数据的一致性。
标签:Mapper,缓存,java,一级,SqlSession,MyBatis,二级缓存,mybatis From: https://blog.51cto.com/u_16173281/6951250