一级缓存
SqlSession级别 在同一个SqlSession内实现数据共享 默认开启
Mybatis默认的一级缓存是开启的. 但是在SpringBoot整合之后.每次mapper调用都是一个全新的SqlSession.所以导致一级缓存不生效
解决方案: 添加事务注解 使用同一个SqlSession
@Test
public void testCache1() {
List<User> list1 = annoMapper.findCache1();
List<User> list2 = annoMapper.findCache1();
List<User> list3 = annoMapper.findCache1();
List<User> list4 = annoMapper.findCache1();
}
@Test
@Transactional
public void testCache1() {
List<User> list1 = annoMapper.findCache1();
List<User> list2 = annoMapper.findCache1();
List<User> list3 = annoMapper.findCache1();
List<User> list4 = annoMapper.findCache1();
}
二级缓存
SqlSessionFactory级别 由同一个SqlSessionFactory生产的SqlSession共享数据 默认开启
所以需要操作同一个mapper的多个SqlSession 需要用户访问多次
xml中配置二级缓存,不适用于mybatis注解查询
使用注解二级缓存: @CacheNamespace
因为已经在xml中配置了使用二级缓存,所以会报错 二者只能留一个