mybatis一级缓存和二级缓存

MyBatis 的一级缓存和二级缓存是两种不同级别的缓存机制,它们的作用范围和特性如下:

一级缓存

  • 作用范围 :SqlSession 级别的缓存。

  • 特性

  • 默认开启,无需额外配置。

  • 对于同一个 SqlSession 中相同的查询操作,第一次查询的结果会被缓存起来。

  • 在同一个 SqlSession 中再次执行相同的查询时,可以直接从缓存中获取数据,提高查询效率。

  • 当 SqlSession 关闭后,缓存会自动清空。

  • 如果 SqlSession 中执行了 insert、update 或 delete 操作,之前的所有缓存都会失效。

二级缓存

  • 作用范围 :Mapper 级别的缓存,可以被多个 SqlSession 共享。

  • 特性

  • 需要在 MyBatis 配置文件(如 mybatis-config.xml)中显式配置启用。

  • 对于多个 SqlSession 中相同的查询操作,如果命中了二级缓存,则可以直接从缓存中获取数据,而不必再次查询数据库。

  • 二级缓存是跨 SqlSession 的,可以显著提高数据库查询的效率。

  • 二级缓存的生命周期是整个应用程序的,当应用程序关闭时,缓存才会被清空。

开启二级缓存

要在 MyBatis 中启用二级缓存,需要在 Mapper.xml 文件中通过 <cache> 标签进行配置。例如:

<select id="selectUserById" resultType="User">
  SELECT * FROM users WHERE id = #{id}
</select>
<cache/>

总结

MyBatis 的一级缓存是默认开启的,用于提高单次 SqlSession 中的查询效率,而二级缓存需要手动配置,用于在多个 SqlSession 之间共享查询结果,进一步提高效率。需要注意的是,二级缓存的生命周期是整个应用程序的,而一级缓存的生命周期仅限于单个 SqlSession

Top