网站平台系统设计公司,石桥铺网站建设,河北省网站备案步骤,商城网站建设公司招聘一、Spring Boot整合MyBatis#xff0c;一级缓存失效
1.1、概述 MyBatis一级缓存的作用域是同一个SqlSession#xff0c;在同一个SqlSession中执行两次相同的查询#xff0c;第一次执行完毕后#xff0c;Mybatis会将查询到的数据缓存起来#xff08;缓存到内存中#xf…一、Spring Boot整合MyBatis一级缓存失效
1.1、概述 MyBatis一级缓存的作用域是同一个SqlSession在同一个SqlSession中执行两次相同的查询第一次执行完毕后Mybatis会将查询到的数据缓存起来缓存到内存中 第二次执行相同的查询时会从缓存中取数据不再进行数据库的查询从而提高查询效率。默认情况下Mybatis开启了一级缓存。但是MyBatis整合Spring Boot时一级缓存却没有生效。 1.2、代码
/*** 验证MyBatis的一级缓存默认是开启的*/
Test
public void getUserByIdTest() {UserMapper userMapper sqlSession.getMapper(UserMapper.class);UserDO userDO1 userMapper.getUserById(1L);System.out.println(userDO1 userDO1);System.out.println();UserDO userDO2 userMapper.getUserById(1L);System.out.println(userDO2 userDO2);
} 1.3、失效原因 当同一个线程开启事务时同一个sql查询多次会走一级缓存而不开启事务时每一查询都是不同的sqlsession即缓存为“失效”状态 。 1.4、解决 添加 Transactional 注解。 /*** 验证MyBatis的一级缓存默认是开启的*/
Transactional
Test
public void getUserByIdTest() {UserMapper userMapper sqlSession.getMapper(UserMapper.class);UserDO userDO1 userMapper.getUserById(1L);System.out.println(userDO1 userDO1);System.out.println();UserDO userDO2 userMapper.getUserById(1L);System.out.println(userDO2 userDO2);
}