baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.41k stars 4.31k forks source link

[功能改进]: LambdaUpdateChainWrapper 添加 setNull() 方法,更加简单快捷的进行设置字段为空 #6532

Open HK-hub opened 3 weeks ago

HK-hub commented 3 weeks ago

确认

功能改进

mybatis plus (当前版本3.5.2)在遇到字段设置为空的需求时,所提供的三个解决方案都存在缺陷。

通过调整FieldStrategy策略粒度太大,会影响全局。

通过mapper(entity, warpper) 方式通过entity和一个LambdaUpdateWrapper进行组合方式达到更新字段为null的目的

但是为什么不给LambadUpdateChainWrapper直接提供一个setNull()方法来直接设置字段为null呢。

并且我使用mapper(entity, warpper) 方式在wrapper中手动设置字段为null但是在进行sql 映射执行的时候还是会报错

参考资料

是否可以增加setNull()方法直接设置字段为null

this.lambdaUpdate()
                .setNull(PileSendOutPlan::getNextDaySend)
                .set(PileSendOutPlan::getSendType, pileSendOutPlan.getSendType())
                .set(PileSendOutPlan::getSendNow, pileSendOutPlan.getSendNow())
                .set(PileSendOutPlan::getPlanSendTime, pileSendOutPlan.getPlanSendTime())
                .eq(PileSendOutPlan::getId, pileSendOutPlan.getId())
                .update();
lnsane commented 1 week ago

和这种有什么区别?

this.lambdaUpdate()
                .set(PileSendOutPlan::getNextDaySend,null)
                .set(PileSendOutPlan::getSendType, pileSendOutPlan.getSendType())
                .set(PileSendOutPlan::getSendNow, pileSendOutPlan.getSendNow())
                .set(PileSendOutPlan::getPlanSendTime, pileSendOutPlan.getPlanSendTime())
                .eq(PileSendOutPlan::getId, pileSendOutPlan.getId())
                .update();
HK-hub commented 1 week ago

你试试能不能更新成null