MyBatis Plus更新策略@TableField(strategy=FieldStrategy.IGNORED)null值字段属性

前言

最近在项目中遇到一个问题,就是在实体MyBatis Plus updateById(xxx)的时候,如果将某个字段设置为null,是更新不了字符串为null的, 本文分享两种解决方案,具体大家可以根据自己的需求选择一种方法解决。

MyBatis Plus更新策略

在实际项目中,我们再很多场景下需要将某些字段设置更新为null, 但是当你使用updateById()方法的时候,会发现根本不生效。这其实是MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进行了不是全量更新的策略:

mybatis-plus:
  global-config:
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 1

这个字段验证策略默认是1, 即NOT NULL,更新的时候做了null判断,默认不更新为null的传参。

field-strategy字段更新插入策略属性说明:
 
IGNORED(0): "忽略判断", 所有字段都更新和插入 
NOT_NULL(1): "非 NULL 判断", 只更新和插入非NULL值  
NOT_EMPTY(2): "非空判断", 只更新和插入非NULL值且非空字符串     
 
DEFAULT:默认NOT_NULL 

解决方法

第一种方法:全局配置方式

在MyBatis-Plus配置文件中修改field-strategy字段验证的值为0,即忽略判断(null值或非null值都更新)。

#mybatis plus 设置
mybatis-plus:
  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml
  global-config:
    # 关闭MP3.0自带的banner
    banner: false
    # 字段更新策略0:"忽略判断",1:"非NULL判断",2:"非空判断"
    field_strategy: 0
    db-config:
      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
      id-type: ASSIGN_ID
      # 默认数据库表下划线命名
      table-underline: true
      logic-delete-field: deleted  # 全局逻辑删除的实体字段名
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  configuration:
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 返回类型为Map,显示null对应的字段
    call-setters-on-nulls: true

第二种方法:在需要设置的字段指定对应的更新策略

这样就可以成功更新为null或者空字符串''的值了~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章