MyBatis的一级、二级缓存(SpringBoot中)
- 一级缓存(SqlSession缓存):
-
- 一级缓存是MyBatis中默认开启的缓存级别,它是指在同一个SqlSession中进行的多次查询操作会将查询结果缓存到内存中,这样在相同的查询操作被重复执行时,MyBatis会直接从内存中获取结果,避免了对数据库的多次访问,从而提高了查询性能。
- 一级缓存是SqlSession级别的缓存,它的作用范围仅限于一个SqlSession,当SqlSession关闭时,一级缓存也会被清空。
- 默认情况下,一级缓存是开启的,不需要额外的配置。
- 二级缓存(SqlSessionFactory全局缓存):
-
- 二级缓存是在SqlSessionFactory级别进行缓存的,它可以被多个SqlSession共享,当多个SqlSession执行相同的查询操作时,会共享相同的查询结果。
- 二级缓存的作用范围是全局的,它可以跨越多个SqlSession,因此适用于多个SqlSession之间频繁执行相同查询操作的场景。
- 使用二级缓存需要手动进行配置,并且需要在Mapper映射文件中显式开启缓存。
- SqlSessionFactory 是全局级别的,用于创建 SqlSession,在整个应用程序中共享。
在application.properties中的配置示例:
# 开启MyBatis的二级缓存
mybatis.configuration.cache-enabled=true
在application.yml中的配置示例:
# 开启MyBatis的二级缓存
mybatis:
configuration:
cache-enabled: true
在Mapper XML文件中使用标签来指定需要开启二级缓存的Mapper。
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
<!-- 其他SQL语句的配置... -->
</mapper>
数据更新机制
对于缓存数据更新机制,当某一个作用域(一级缓存SqlSession/二级缓存SqlSessionFactory)进行了增/删/改操作后,默认该作用域下所有select中的缓存将被clear。