在开发工作中没有直接感知到MyBatis 的缓存的存在,前几天看到相关面试题目,因此特意了解一下。MyBatis 的缓存机制在实际开发中非常有用,尤其是在需要提升性能的场景中。以下是对 MyBatis 缓存的详细说明:
1. MyBatis 缓存的作用
MyBatis 提供了两级缓存机制,用于减少数据库查询次数,提升性能:
- 一级缓存:默认开启,作用于 SqlSession 级别,即在同一个 SqlSession 中,相同的查询会直接从缓存中返回结果,而不需要再次访问数据库。
- 二级缓存:需要手动配置,作用于 Mapper 级别,即在多个 SqlSession 之间共享缓存数据。
2. 一级缓存(Local Cache)
- 范围:同一个 SqlSession 内有效。
- 默认开启:无需额外配置。
- 生命周期:
- 当执行
insert
、update
、delete
操作时,缓存会被清空。 - 调用
SqlSession.clearCache()
方法也会清空缓存。 - SqlSession 关闭后,缓存失效。
- 当执行
- 适用场景:适合短生命周期、重复查询的场景。
示例:
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 第一次查询,会访问数据库
User user1 = userMapper.selectUserById(<