MyBatis一级缓存
作用范围:一级缓存是SqlSession级别的缓存,也就是说,每个SqlSession都有自己的缓存
生命周期:当SqlSession关闭时,一级缓存会被清空。
特点:
相同的查询语句和参数在同一个SqlSession内,MyBatis会直接从缓存中获取数据,避免重复查询数据库
如果执行了插入,更新或删除操作,会导致缓存失效
MyBatis二级缓存
作用范围:二级缓存是Mapper级别的缓存,多个SqlSession可以共享同一个二级缓存
生命周期:当对应的Mapper被加载或SqlSessionFactory被关闭时,二级缓存会被清空
特点:
可以配置使用不同的缓存实现,比如Ehcache,Redis等
二级缓存需要显示开启和配置
对于相同的查询,在不同的SqlSession中,如果二级缓存存在,MyBatis会从中获取数据
配置示例
1.开启二级缓存:在MyBatis的配置文件中设置
<setting>
<setting name="cacheEnabled" value="true"/>
</setting>
2在Mapper中使用:在对应的Mapper XML文件中,添加<cache/>标签
<mapper namespace="com.example.mapper.ExampleMapper">
<cache/>
</mapper>
3.使用自定义缓存实现:如果使用Redis等缓存框架,可以在Mapperd的<cache/>标签中指定具体的缓存实现:
<cache type="org.example.RedisCache"/>
通过合理配置一级和二级缓存,可以显著提升应用的性能,减少数据库的负担。