mybatis缓存技术

本文详细解析MyBatis的一级和二级缓存机制,包括缓存的开启条件、工作原理及常见问题。探讨了缓存对于提高数据库查询效率的重要性,并指出了MyBatis自身缓存的局限性,提出了使用外部缓存框架如Redis、ehcache的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、一级缓存

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

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

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

2、二级缓存

默认不开启;

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

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

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

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

注意!!!

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

解决方法:

结果:

3、mybatis自身缓存缺陷

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

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

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值