一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在。
此处调用findById方法
@Test
public void cacheTest() throws IOException {
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sessionFactory.openSession();
userDao = sqlSession.getMapper(IUserDao.class);
//测试一级缓存
User user1 = userDao.findById(55);
System.out.println(user1);
User user2 = userDao.findById(55);
System.out.println(user2);
System.out.println(user1==user2);
inputStream.close();
sqlSession.close();
}
//测试一级缓存
User user1 = userDao.findById(55);
System.out.println(user1);
sqlSession.close();
sqlSession = sessionFactory.openSession();
userDao = sqlSession.getMapper(IUserDao.class);
User user2 = userDao.findById(55);
System.out.println(user2);
System.out.println(user1==user2);
inputStream.close();
sqlSession.close();
可见Mybatis默认开启了一级缓存,sqlSession未关闭则可以共享sqlSession已经查询出来的数据。