缓存

使用缓存,我们可以避免频繁的与数据库进行交互,尤其是在查询越多、缓存命中越高的情况下,使用缓存对性能的提高更明显。

MyBatis分别支持一级缓存和二级缓存,其中一级缓存是sqlSession级的缓存,而二级缓存则可以实现多个sqlSession间的缓存。

一级缓存

一级缓存是sqlSession级的,是因为它支持同一个sqlSession下的缓存,缓存在同一个sqlSession之间是共享的。

一级缓存分为两个范围:

  • statement:就是一个sql语句

  • session:有数据库产生一个连接,即一个sqlSession

mybatis默认是开启一级缓存的,不需要专门进行配置,

一级缓存测试

@Operation(summary = "根据id获取用户")
@GetMapping("/api/user")
public Object user2() {
    User userById1 = userMapper.findUserById(7);
    System.out.println(userById1);
    User userById2 = userMapper.findUserById(7);
    System.out.println(userById2);
    return userById2;
}
没有缓存的示例
未开启缓存的示例

接下来我们在方法上添加@Transactional注解,在执行一次,就会发现sql语句只执行了一次,那么本次的缓存被命中了,第二次的查询是直接从缓存中获取到的数据。

参照:https://zhuanlan.zhihu.com/p/142794376

二级缓存

默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:

<cache/>

最后更新于

这有帮助吗?