一级缓存(默认开启)
- MyBatis的一级缓存是SqlSession级别的,即通过同一个SqlSession查询的数据会被缓存
- 再次使用同一个SqlSession查询同一条数据,会从缓存中获取
1、代码验证一级缓存
@Test
public void testFirstLevelCache() {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
Employee employee1 = mapper.selectEmployeeById(2);
log.debug("employee1 = " + employee1);
Employee employee2 = mapper.selectEmployeeById(2);
log.debug("employee2 = " + employee2);
log.debug("(employee2 == employee1) = " + (employee2 == employee1));
log.debug("employee1.equals(employee2) = " + employee1.equals(employee2));
log.debug("employee1.hashCode() = " + employee1.hashCode());
log.debug("employee2.hashCode() = " + employee2.hashCode());
}
2、一级缓存失效的情况
- 不是同一个SqlSession
- 同一个SqlSession但是查询条件发生了变化
- 同一个SqlSession两次查询期间执行了任何一次增删改操作
- 同一个SqlSession两次查询期间手动清空了缓存
- 同一个SqlSession两次查询期间提交了事务
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析