Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,Mybatis提供了一级缓存和二级缓存两种缓存机制,用于提高查询性能和减少数据库访问次数。
Mybatis一级缓存
1、什么是一级缓存?
一级缓存是Mybatis中默认开启的缓存机制,也叫本地缓存,当我们执行查询操作时,Mybatis会将查询结果存储在内存中,如果再次执行相同的查询语句,Mybatis会直接从内存中获取结果,而不会再次去数据库中查询,一级缓存是基于SqlSession级别的,也就是说在同一个SqlSession中,相同的查询语句和参数会共享同一个缓存。
2、一级缓存的特点
(1)范围:同一个SqlSession
(2)生命周期:与SqlSession相同,当SqlSession关闭或者清空缓存时,一级缓存也会被清空。
(3)作用域:同一个Mapper方法调用
(4)缓存策略:LRU(最近最少使用)策略
3、如何配置一级缓存?
在Mybatis的配置文件(mybatis-config.xml)中,可以通过设置<settings>标签下的<setting name="cacheEnabled" value="true"/>来开启一级缓存,还可以通过设置<setting name="lazyLoadingEnabled" value="true"/>来开启懒加载功能,这样一级缓存在第一次查询时才会生效。
Mybatis二级缓存
1、什么是二级缓存?
二级缓存是Mybatis提供的一种全局缓存机制,它可以跨SqlSession共享数据,二级缓存是基于HashMap实现的,当多个SqlSession执行相同的查询语句时,Mybatis会将查询结果存储在二级缓存中,后续的SqlSession可以直接从二级缓存中获取结果,而不需要再去数据库中查询,二级缓存需要手动配置和创建,通常使用第三方缓存实现库如EhCache、Redis等。
2、二级缓存的特点
(1)范围:跨SqlSession
(2)生命周期:与应用程序相同,当应用程序关闭或者清空缓存时,二级缓存也会被清空。
(3)作用域:同一个Mapper接口及其所有方法调用
(4)缓存策略:基于自定义的Cache实现类,可以自定义缓存策略