MyBatis提供了一级缓存和二级缓存来提升查询性能和减轻数据库的压力。
1. 一级缓存:
- 一级缓存是MyBatis的默认缓存机制,它是在SqlSession级别上的缓存,即在同一个SqlSession内的多次查询中,如果查询条件相同,那么第一次查询的结果会被缓存起来,后续的相同查询会直接从缓存中获取,而不会再去执行SQL查询语句。
- 一级缓存是与SqlSession关联的,当SqlSession关闭或者执行了更新操作(插入、更新、删除)时,一级缓存就会被清空。
- 默认情况下,一级缓存是开启的,可以通过在MyBatis配置文件中的`<setting>`标签中设置`localCacheScope`属性为`STATEMENT`来关闭一级缓存。
2. 二级缓存:
- 二级缓存是基于Mapper级别的缓存,不同的SqlSession可以共享该级别的缓存。它可以跨SqlSession的多个查询中使用。
- 二级缓存是默认关闭的,需要手动开启,可以在MyBatis配置文件中的`<setting>`标签中设置`<setting name="cacheEnabled" value="true"/>`来开启二级缓存。
- 二级缓存的有效范围只限于同一个Mapper,不同Mapper之间的缓存互相隔离。
- 若要使用二级缓存,需要保证Mapper类和映射文件中对应的查询语句开启了缓存,可以在映射文件中的`<select>`、`<insert>`、`<update>`、`<delete>`标签中设置`useCache="true"`。
需要注意的是,缓存虽然可以提升查询性能,但在一些特定情况下也可能带来数据不一致的问题,因此在使用缓存时需要慎重考虑,并根据具体业务场景进行配置和使用。