Mybatis14 - 一级缓存

一级缓存(默认开启)

  • MyBatis的一级缓存是SqlSession级别的,即通过同一个SqlSession查询的数据会被缓存
  • 再次使用同一个SqlSession查询同一条数据,会从缓存中获取

1、代码验证一级缓存

@Test
public void testFirstLevelCache() {
    
    EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
    
    // 1.第一次查询
    Employee employee1 = mapper.selectEmployeeById(2);
    
    log.debug("employee1 = " + employee1);
    
    // 2.第二次查询
    Employee employee2 = mapper.selectEmployeeById(2);
    
    log.debug("employee2 = " + employee2);
    
    // 3.经过验证发现,两次查询返回的其实是同一个对象
    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两次查询期间提交了事务
posted @   LaViez  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示