一、前言
mybatis 相比hibernate,也有自身的缓存,分为两层,一级缓存面向SqlSession,生命周期跟Session保持一致,不可以物理关闭;二级缓存是全局缓存,所有的Session共享,可以关闭。
在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的结果极有可能完全相同,由于查询一次数据库的代价很大,这有可能造成很大的资源浪费。
为了解决这一问题,减少资源的浪费,MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候,如果判断先前有个完全一样的查询,会直接从缓存中直接将结果取出,返回给用户,不需要再进行一次数据库查询了。
如下图:为mybatis的缓存架构图:
二级缓存部分源码截图:
根据MS配置的flushCache属性来选择是否清理缓存:
根据ms配置的usecache属性来选择是否使用二级缓存: