MyBatis缓存为俩层体系。分为一级缓存和二级缓存。
一级缓存:
一级缓存默认开启,一级缓存的作用域是SqlSession级别的,这意味着当你更换SqlSession之后就不能再利用原来的SqlSession的一级缓存了。不同的SqlSession之间的一级缓存是隔离的。
但是在开发中更换SqlSession是更频繁的操作,所以一级缓存对我们的意义不太大。
使用了一级缓存,只查询了一次:
更换SqlSession后失效:
进行了俩次数据库查询:
二级缓存:
二级缓存的作用域是Mapper级别的,可以在多个SqlSession之间共享。
MyBatis二级缓存默认是关闭的。开启条件有四个:
- 在配置文件中通过settings配置cacheEnabled为true,但是当前MyBatis中已经默认配置为true,所以不用写,是一个建议性的配置。
- 在mapper文件中加入cache标签:
- 在sql标签中配置useCache属性,这个配置也可以省略。
- 存在事务。MyBatis自动开启事务,所以我们只需要将事务进行commit提交即可。
总结:满足上述第二点(cache标签)和第四点配置(存在事务)即可开启MyBatis二级缓存: