Mybatis

您所在的位置:网站首页 mybatisplus更新空字段 Mybatis

Mybatis

2023-03-13 11:51| 来源: 网络整理| 查看: 265

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

LambdaUpdateWrapper 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.lambdaUpdate() .set(Entity::getField, null) .eq(Entity::getId, 2) );

也可以是下面的写法

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

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3