Mybatis-Plus坑之set()
事情是这样的,在做项目的时候需要对满足条件的数据循环改变数据库字段的数据,为了图方便快捷,因此打算使用MP的set()方法减少创建实体类的麻烦过程。下图为MP官网对set()方法的说明:
根据个人习惯,在java中的代码体现如下所示:
for(CtDigitalWenpuMerchantProductDto productDto : list) {
LambdaUpdateWrapper<CtDigitalWenpuMerchantProduct> wrapper = Wrappers.<CtDigitalWenpuMerchantProduct>lambdaUpdate();
BigDecimal rebate = new BigDecimal(productDto.getRebate());
BigDecimal divide = rebate.divide(BigDecimal.valueOf(100));
wrapper.eq(CtDigitalWenpuMerchantProduct::getUid,productDto.getUid());
wrapper.eq(CtDigitalWenpuMerchantProduct::getPid,productDto.getPid());
wrapper.set(CtDigitalWenpuMerchantProduct::getRebate,divide);
wrapper.set(CtDigitalWenpuMerchantProduct::getType,0);
wrapper.set(CtDigitalWenpuMerchantProduct::getStatus,1);
baseMapper.update(null,wrapper);
}
结果在测试时,修改两个(多个没有测试)数据时最终只有一条数据符合预期,最后在朋友提醒下尝试将 set 与 eq 条件交换位置,发现程序运行符合预期了。由此可以看出,MP的set()方法是对照sql中的 update 操作来实现的,特此记录防止下次再犯类似错误。
for (CtDigitalWenpuMerchantProductDto productDto : list) {
LambdaUpdateWrapper<CtDigitalWenpuMerchantProduct> wrapper = Wrappers.<CtDigitalWenpuMerchantProduct>lambdaUpdate();
BigDecimal rebate = new BigDecimal(productDto.getRebate());
BigDecimal divide = rebate.divide(BigDecimal.valueOf(100));
wrapper.set(CtDigitalWenpuMerchantProduct::getRebate,divide);
wrapper.set(CtDigitalWenpuMerchantProduct::getType,0);
wrapper.set(CtDigitalWenpuMerchantProduct::getStatus,1);
wrapper.eq(CtDigitalWenpuMerchantProduct::getUid,productDto.getUid());
wrapper.eq(CtDigitalWenpuMerchantProduct::getPid,productDto.getPid());
baseMapper.update(null,wrapper);
}