一、一级缓存
1、Mybatis的一级缓存的作用域是session,当openSession()后,在这个session中执行相同的SQL(相同的SQL语句+参数),mybatis不执行SQL,而是从缓存中命中、返回,
mybatis中,一级缓存默认是开启的,并且无法关闭
一级缓存命中条件:同一个session + 相同的SQL和参数
代码示例
com.mzj.MyBatisCache1Test的testCache1用例
2、使用:sqlSession.clearCache();可以强制清除缓存
代码示例
com.mzj.MyBatisCache1Test的testQueryUserByIdClearCache用例
3、执行update、insert、delete的时候,会清空缓存
代码示例
com.mzj.MyBatisCache1Test的testQueryUserById4UpdateAutoClearCache用例
二、二级缓存
1、mybatis的二级缓存的作用域是一个mapper的namespace,同一个namespace中查询sql可以从缓存中命中。
2、mybatis的二级缓存默认是不开启的,开启方式如下:
1)在mapper中设置
2)开启二级缓存,pojo类,这里是User对象必须实现java序列化接口
代码示例
com.mzj.MyBatisCache2Test的testCache2用例
3、全局设置二级缓存
4、二级缓存高级配置
三、代码地址
https://github.com/mazhongjia/mybatis-common