mybatisPlus更新字段值为null的解决方案
短信预约 -IT技能 免费直播动态提醒
问题描述
用Mybatis-Plus的update()或者updateById()来更新数据时,无法将字段设置为null值(更新后数据还是原来的值)。
TableField源码
package com.baomidou.mybatisplus.annotation;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ResultMapping;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.UnknownTypeHandler;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableField {
String value() default "";
boolean exist() default true;
String condition() default "";
String update() default "";
FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;
FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;
FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;
FieldFill fill() default FieldFill.DEFAULT;
boolean select() default true;
boolean keepGlobalFormat() default false;
JdbcType jdbcType() default JdbcType.UNDEFINED;
Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;
boolean javaType() default false;
String numericScale() default "";
}
FieldStrategy 源码
更新策略默认是不为Null
package com.baomidou.mybatisplus.annotation;
public enum FieldStrategy {
IGNORED,
NOT_NULL,
NOT_EMPTY,
DEFAULT,
NEVER
}
设置为null的方案
使用UpdateWrapper更新
userService.lambdaUpdate()
.eq(User::getId, user.getId())
.set(User::getUserName, user.getUserName())
.set(User::getNickName, null)
.update();
设置全局的field-strategy(不推荐)
mybatis-plus:
global-config:
# 字段策略 0:忽略判断,直接拼SQL, 1:非NULL, 2:非空,3:默认;4:永远不加入SQL
field-strategy: 0
设置某个字段的field-strategy
在实体的某个字段上设置
@ApiModelProperty(value = "所在党组织")
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Long partyOrgId;
更新时直接将值设置为null
staffInfo.setPartyOrgId(null)
总结
到此这篇关于mybatisPlus更新字段值为null的文章就介绍到这了,更多相关mybatisPlus更新字段值为null内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341