Mybaits-plus采坑之IService接口remove 方法一直返回true
- 版本 springboot 2.0.3 + mybatis-plus 3.1.0
- 起因 在使用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.img.cn/20200110094420837.png update方法实现 remove方法实现 上述区别,save和update 都是通过retBool方法判断数据库受影响行数来决定是返回true或false 查看SqlHelper,判断返回true或false的逻辑和我们预期一致 com.baomidou.mybatisplus.extension.toolkit.SqlHelper 再来查看delBool方法,如下和我们预期不一致,此处要注意的就是只要程序运行没有报错remove方法就会一直返回true,可能就会导致我们的业务逻辑出问题
- 总结 上述remove方法一直返回true的问题,在最新版本3.3.0已经修复,SqlHelper中已经移除delBool方法,save update remove全部都使用retBool方法判断逻辑。 大家在使用MP 的IService接口时,如果不熟悉或不太确定接口底层的实现逻辑是否与自己的预期一致,建议是先看一下源码使用单元测试验证一下逻辑是否正常,此问题就是本人在单元测试removeById方法时,故意使用一个表中不存在的id测试,才发现此问题。