美文网首页MyBatis Plus专题
Mybatis-plus置字段为空的正确写法

Mybatis-plus置字段为空的正确写法

作者: 执着的逗比 | 来源:发表于2021-10-17 17:22 被阅读0次

    公司开始将持久层框架替换成了Mybatis-plus,而使用Mybatis-plus时就会遇到一个很诡异的问题,就是你想更新数据库的某个字段为null时,使用以下写法:

LambdaUpdateWrapper<Entity> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(Entity::getField,null);
wrapper.eq(Entity::getId,1);
this.update(wrapper)

你会发现毫无效果,打印出SQL查看,你也会发现根本没有该字段update...set...的记录,这是为什么呢?这是因为Mybatis-plus在更新的时候做了null判断,默认不更新为null的传参字段,但业务如此,我们应该怎么写呢?

方式一:调整全局的验证策略

注入配置 GlobalConfiguration 属性 fieldStrategy

方式二:调整字段验证注解

根据具体情况,在需要更新的字段中调整验证注解,如验证非空:

@TableField(strategy=FieldStrategy.NOT_EMPTY)

方式三:使用 UpdateWrapper (3.x)

使用以下方法来进行更新或插入操作:

mapper.update(
    null,
    Wrappers.<Entity>lambdaUpdate()
       .set(Entity::getField, null)
       .eq(Entity::getId, 2)
);

也可以是下面的写法

UpdateWrapper<Entity> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("field", null);
updateWrapper.eq("id", 2)
this.update(updateWrapper);

但是这种写法是会写死实体的字段名称,不易于拓展,不推荐。

这里的话,我比较推荐使用第三种方式,因为他不需要在代码配置改动什么的,只需要在业务代码自定义修改想要修改的实体字段,较为灵活。

相关文章

网友评论

    本文标题:Mybatis-plus置字段为空的正确写法

    本文链接:https://www.haomeiwen.com/subject/vrswoltx.html