Mybatis_一级缓存
SqlSessionFactory sessionFactory; public void selectPersonByIdLazy() { // 创建SqlSession SqlSession session = sessionFactory.openSession(); try { // 第一次查询的是数据库 Person person = session.selectOne("xxx.x.mapper.PersonMapper.selectPersonById", 1); // 第一次查询的是缓存 Person person1 = session.selectOne("xxx.x.mapper.PersonMapper.selectPersonById", 1); System.out.println(person); System.out.println(person1); } catch (Exception e) { e.printStackTrace(); session.rollback(); } finally { session.close(); } }
在同一个session下// 第一次查询首先去缓存中去根据结果集的唯一标识(Mybatis自己的策略)查找数据,如果缓存中有数据,就使用,没有就去数据库查找,然后把结果集放入缓存// 第二次查询的是缓存
但是跨session不能使用一级缓存
一级缓存不受我们配置,二级可以
如果两次查询中间加一句update更新数据库的语句,那么查了第一次数据会进缓存里,然后执行update后缓存被清空,执行第二次查询又重新查询数据库了。