Mybatis缓存使用注意

本文介绍了MyBatis中的一级缓存和二级缓存工作原理。一级缓存作用于SqlSession级别,相同查询可避免重复执行。二级缓存则在应用全局生效,但需要注意隔离级别设置以防脏读。对于涉及多表join查询的情况,由于缓存Key由SQL语句和参数构成,若目标表数据变化,缓存可能返回旧数据。

众所周知,mybatis设计了两级缓存。

第一级是SqlSession维度的,同一个的SqlSession里面的相同查询,不会走DB,而是走SqlSession的缓存。一级缓存默认是开启的,需要注意的是,如果DB层面事务隔离级别 < RR,那么该缓存会产生和隔离级别不一样的语义(RR下的当前读也会产生问题)。

二级缓存是Application全局维度的,同样也存在上面隔离级别的问题。使用时需要特别注意:sql如果涉及到多表操作,例如多表join查询,如果join的目标表记录发生变化,缓存的的Key是sql statement和参数,一致的情况下,这里是感知不到的,仍然走缓存会导致读到脏数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值