1、一级缓存

条件:同一个的sqlsession中;默认开启;执行相同语句;中间无数据库update操作;如图为不同sqlsession,一级缓存失效

清除缓存,通过sqlsession.clearCache();

mybatis缓存技术

中间进行删除,一级缓存失效,重新开始缓存

mybatis缓存技术

2、二级缓存

默认不开启;

在mapper.xml配置文件中加入<Cache></Cache>标签开启

范围为不同的sqlsession,1:当一级缓存关闭时,可以执行二级缓存;

 :2: 当一级缓存执行增删改时,一级缓存关闭,如果添加<Cache></Cache>标签,则数据也会被加载到二级缓存中

相关属性:flushCache:默认为true,在select,delete,insert标签中都有,不写默认为true,清空一级、二级缓存;false则不清空

注意!!!

如果数据存放类没有实现serialize接口,会报错

mybatis缓存技术

解决方法:

mybatis缓存技术

结果:

mybatis缓存技术

3、mybatis自身缓存缺陷

因为delete、等标签自身的flushCache为true,如果不为true,为flase,则下一次查询,缓存中的数据不变,和数据库中数据不匹配,出错;如果为true,则将一级、二级缓存都彻底清除,下次查询得重新查询,大大消耗运行时间和内存,所以,一般不用mybatis自身的缓存,用别的框架:

比如 Redis、ehcache等,它们优点是支持特定条数删除,修改等,不重新加载别的数据

两次删除修改等,在当前缓存修改一次,对数据库操作也修改一次

 

 

 

相关文章: