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