Mybaits-plus采坑之IService接口remove 方法一直返回true

  1. 版本
    springboot 2.0.3 + mybatis-plus 3.1.0

  2. 起因
    在使用MP时,我自己的Service 接口可以实现MP的IService接口,这样外部就可以直接使用Service接口调用MP通用的CRUD方法,MP IService接口save update remove (新增 ,修改,删除)方法返回类型是boolean,正常逻辑来说就是上述几类操作当数据库影响行数大于0时才能返回true否则就是false,然而实际情况确认不是我们理想中的那样,查看IService 接口实现类com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
    save方法实现
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200110094420837.png在这里插入图片描述
    update方法实现
    在这里插入图片描述
    remove方法实现
    在这里插入图片描述
    上述区别,save和update 都是通过retBool方法判断数据库受影响行数来决定是返回true或false
    在这里插入图片描述
    查看SqlHelper,判断返回true或false的逻辑和我们预期一致
    com.baomidou.mybatisplus.extension.toolkit.SqlHelper
    在这里插入图片描述
    再来查看delBool方法,如下和我们预期不一致,此处要注意的就是只要程序运行没有报错remove方法就会一直返回true,可能就会导致我们的业务逻辑出问题
    在这里插入图片描述

  3. 总结
    上述remove方法一直返回true的问题,在最新版本3.3.0已经修复,SqlHelper中已经移除delBool方法,save update remove全部都使用retBool方法判断逻辑。
    大家在使用MP 的IService接口时,如果不熟悉或不太确定接口底层的实现逻辑是否与自己的预期一致,建议是先看一下源码使用单元测试验证一下逻辑是否正常,此问题就是本人在单元测试removeById方法时,故意使用一个表中不存在的id测试,才发现此问题。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值