暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mybatis批处理和增删改操作影响行数返回负数的情况

纪鑫鑫 2021-06-28
942

项目中经常看到这样的代码:

    int rows = mypaymentDao.batchInsert(t);//如果rows不大于0,即未插入成功if (rows <= 0) {  throw new Sv2Exception("数据处理失败");}

    通过Mybatis,在对数据库增删改的操作中,我通常判断操作是否成功的处理,都是直接判断是否为0,并没有考虑到小于0的情况,也一直认为没有小于0的情况,但是抱着质疑的态度百度了一下,还真有小于0的情况。


    是由于defaultExecutorType引起的,defaultExecutorType有三个执行器SIMPLE、REUSE和BATCH。其中BATCH可以批量更新操作缓存SQL以提高性能,但是有个缺陷就是无法获取update、delete返回的行数。


    如果设置为BATCH,更新返回值就会丢失。Mybatis官网是这么描述的:If the BATCH executor is in use, the update counts are being lost.


    其中defaultExecutorType的默认执行器是SIMPLE,所以想处理返回影响行数为负数的情况,要么把defaultExecutorType执行器的值改为SIMPLE或REUSE,或者直接删除该配置就可以了,要么在程序代码中添加数据库操作影响行数小于等于0的判断处理。


    另外,在百度解决上面问题的过程中还了解到,update操作数据更新成功,返回的影响行数是0的情况,具体原因我就不赘述了。最后想说,实践出真知,百度真强大,网友啥都懂,赞一个!



    点击卡片关注公众号,了解更多技术内容!

    文章转载自纪鑫鑫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论