MyBatis的缓存指的是缓存查询结果,当以后使用相同的sql语句、传入相同的参数进行查询时,可直接从mybatis本地缓存中获取查询结果,而不必查询数据库。
mybatis的缓存包括一级缓存、二级缓存,一级缓存默认是开启的,二级缓存默认是关闭的。
一级缓存:
SqlSession级别,在SqlSession中有一个Map,key是由sql语句、参数等信息组成的唯一值,value是查询出来的结果对象。
二级缓存:
mapper级别,同一个namespace下的mapper,有一个Map。
二级缓存可以使这些sqlSession做到查询结果共享。
一级缓存
一级缓存默认是开启的。
User user1 = mapper.queryUserById(1);
User user2 = mapper.queryUserById(1);
第一次查询时,就将查询结果放到一级缓存中。
如果后续使用的sql语句相同、传入的实参也相同,则结果对象也会相同,直接从一级缓存中获取结果对象,不再查询数据库。
User user1 = mapper.queryUserById(1);
sqlSession.commit();
User user2 = mapper.queryUserById(1);
如果此sqlSession调用了commit()方法,会自动清空此sqlSession的一级缓存。
因为使用commit(),会将修改提交到数据库,下一次相同的查询,查询结果可能变了,之前的一级缓存不能再用,所以会自动清空。
User user1 =