MyBatis Plus的一级缓存和二级缓存在哪里?

Mybatis Plus本身不提供缓存功能,需要结合Mybatis的一级缓存和二级缓存使用。

一级缓存

Mybatis的一级缓存默认开启,存在于SqlSession中。也就是一个Session的生命周期内有效。

使用方法和Mybatis一样:

SqlSession session1 = factory.openSession();
User user1 = session1.selectOne("selectById", 1);

SqlSession session2 = factory.openSession();
User user2 = session2.selectOne("selectById", 1);

// user1 != user2  
// 因为SqlSession不同,一级缓存不同

在同一个SqlSession下查询,才会使用一级缓存。一级缓存对于同一次会话的多次查询非常有效。

二级缓存

二级缓存存在于SqlSessionFactory(会话工厂)中。应用范围更加广泛,被多个SqlSession共享。

使用方法也是一样的:

SqlSession session1 = factory.openSession();
User user1 = // ...

SqlSession session2 = factory.openSession();
User user2 = // ...

// user1 == user2  
// 因为使用相同的SqlSessionFactory,共享二级缓存

不同SqlSession(会话)可以共享二级缓存。大大提高了查询效率。

总的来说,Mybatis Plus本身没有实现缓存。

但可以结合Mybatis的一级缓存和二级缓存使用:

  • 一级缓存会话级别,作用范围小
  • 二级缓存作用范围更大,需要额外配置

通过合理使用Mybatis的缓存功能,能提高Mybatis Plus的性能。