mybatis二级缓存联表查询需要注意的问题

来源:互联网 发布:淘宝客在哪里找产品 编辑:程序博客网 时间:2024/06/04 21:25

1、在开启了mybatis二级缓存情况下,联表查询后,对表进行了update、delete、insert等操作后,再次联表查询可能会造成脏读;

假设有一条联表的sql,设定为A,在执行了A操作后,mybatis会将结果集存入缓存中,设定为A-cache,还有一条sql,设定为B,B的实际操作会影响了A的表内结果,但是由于B的操作只是更改了数据库内的值,没有更改到A-cache内的值,所以下次执行A操作的时候,结果就出现了脏读;

2、解决这样问题的方法

①不使用二级缓存;

②对于联表查询的sql,usecache设置成false;

③使用mybatis-enhanced-cache,这个具体没有尝试过,但是我看原有项目中,比如执行了某个insert后,配置一个观察者的联表查询,具体操作就是情况这个mapper下的select;

3、那么如果不是联表查询,还会存在脏读吗?

我进行了一下操作:

1、先select一下,然后手动去更改数据库,再次select发现还是上一次的值;

2、同样的,先select一下,然后再insert一下,在册select,发现这次取出来的值是正确的,说明insert操作,清空了select的值