mybatis和mybatis-plus设置值为null无效,如何处理呢?

欣喜 MyBatis 发布时间:2024-01-19 16:00:31 阅读数:17567 1
下文笔者讲述mybatis和mybatis-plus中null无效的解决方法分享

null无法录入的实现思路

使用FieldStrategy即可实现null录入

FieldStrategy作用

Mybatis-Plus字段策略FieldStrategy的功能:
    进行新增、更新时
     根据配置的策略判断是否对实体对象的值进行空值判断
   
     如果策略为字段不能为空,则不会对为空的字段进行赋值或更新。
      同样
       在进行where条件查询时
     根据whereStrategy策略判断是否对字段进行空值判断
    如果策略为字段不能为空,则为空的字段不会作为查询条件组装到where条件中。
三个配置,对应三种使用场景
insertStrategy 在insert操作时的字段策略,是否进行空值判断,插入空值
updateStrategy 在update操作时的字段策略,是否进行空值判断,插入空值
whereStrategy 在where条件组装时,是否进行控制判断,将空值作为查询条件

FieldStrategy类型

有5种策略类型

public enum FieldStrategy {
    IGNORED,
    NOT_NULL,
    NOT_EMPTY,
    DEFAULT,
    NEVER;

    private FieldStrategy() {
    }
}
备注
IGNORED 忽略空值判断,实体对象的字段是什么值就用什么值更新,支持null值更新操作
NOT_NULL 进行非NULL判断,也是默认策略,相当于age!=null
NOT_EMPTY 进行非空判断,主要是针对字符串类型,相当于name != null and name != ‘’
NEVER 从不更新,不管字段是否有值,都不进行更新
DEFAULT 追随全局配置

全局策略配置

在全局配置中
    三者的默认值都是FieldStrategy.NOT_NULL
      即进行空值判断
     不对NULL值数据进行处理

public DbConfig() {
    this.idType = IdType.ASSIGN_ID;
    this.tableUnderline = true;
    this.capitalMode = false;
    this.logicDeleteValue = "1";
    this.logicNotDeleteValue = "0";
    this.insertStrategy = FieldStrategy.NOT_NULL;
    this.updateStrategy = FieldStrategy.NOT_NULL;
    this.whereStrategy = FieldStrategy.NOT_NULL;
}

spring boot中可以通过配置属性修改全局字段策略

mybatis-plus.global-config.db-config.update-strategy=not_null
mybatis-plus.global-config.db-config.insert-strategy=not_null
mybatis-plus.global-config.db-config.where-strategy=not_null

@TableField注解源码

@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;
    
    //where条件策略
    FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;

    FieldFill fill() default FieldFill.DEFAULT;

    boolean select() default true;

    boolean keepGlobalFormat() default false;

    String property() default "";

    JdbcType jdbcType() default JdbcType.UNDEFINED;

    Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

    boolean javaType() default false;

    String numericScale() default "";
}
 
 insertStrategy、updateStrategy和whereStrategy
   默认策略都是FieldStrategy.DEFAULT
跟随全局配置

忽略判断IGNORED

@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;
   @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String email;
}

从不处理-NEVER(指定字段从来不更新)

@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;
   @TableField(updateStrategy = FieldStrategy.NEVER)
   private String email;
}

 
 策略FieldStrategy.NEVER
   不但会忽略字段值的空值判断
    而且不管标识的字段是否有值
   都不会进行更新操作 

字符不为空-NOT_EMPTY

策略FieldStrategy.NOT_EMPTY
    需要对字符串进行空值判断
      只有非空字符串的字段才会参与数据处理

相当于mybatis的xml文件中的if判定条件判断:name != null and name != ‘’

跟随全局-DEFAULT

策略FieldStrategy.DEFAULT
   全局配置的字段策略,这也是字段级别的默认策略
全局的字段策略,默认是FieldStrategy.NOT_NULL。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202401/7708.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者