mybatisPlus更新字段值为null的解决方案
问题描述
用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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关文章