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 @ 2023-02-14 19:19  LaViez  阅读(21)  评论(0)    收藏  举报