MyBatis-Plus:updateById方法更新不了空字符串或NULL问题

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。MyBatis-Plus:updateById方法更新不了空字符串或NULL问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在用mybatis-plus封装的updateById方法来更新数据时,想把一个字段设置为null值,但是发现更新后数据没有为null还是原来的值,这是因为mybatis-plus在更新的时候做了null判断,默认不更新为null的传参。可以在配置文件中设置update-strategy为ignored来全局处理,也可以在字段上设置注解来单个处理:@TableField(updateStrategy = FieldStrategy.IGNORED)。在低版本的mybatis-plus中可以全局设置field-strategy为ignored,或单个字段设置注解
@TableField(strategy = FieldStrategy.IGNORED)来处理。

解决办法

当用户有更新字段为 空字符串 或者 null 的需求时,需要对 FieldStrategy 策略进行调整:

方式一:调整全局的验证策略

注入配置 GlobalConfiguration 属性 fieldStrategy

配置文件中设置update-strategy为ignored来全局处理

mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.cyl.**.domain, com.ruoyi.common.core.domain.entity,  com.ruoyi.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      # 主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: auto
      # 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
      update-strategy: ignored

在低版本的mybatis-plus中可以全局设置field-strategy为ignored 

# Mybatis 配置
mybatis-plus:
    # 如果是放在src/main/java目录下
    mapper-locations: classpath*:/com/chilin/*/dao/mapper/*Mapper.xml
    # 实体扫描,多个package用逗号或者分号分隔
    typeAliasesPackage: com.chilin.*.entity
    global-config:
        db-config:
            # 主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
            id-type: ID_WORKER
            # 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
            field-strategy: IGNORED

方式二:调整字段验证注解

根据具体情况,在需要更新的字段中调整验证注解:
@TableField(updateStrategy=FieldStrategy.IGNORED)

低版本:
@TableField(strategy=FieldStrategy.IGNORED)

方式三:使用 UpdateWrapper (3.x)

使用以下方法来进行更新或插入操作:

//updateAllColumnById(entity) // 全部字段更新: 3.0已经移除
mapper.update(
   new User().setName("mp").setAge(3),
   Wrappers.<User>lambdaUpdate()
           .set(User::getEmail, null) //把email设置成null
           .eq(User::getId, 2)
);
//也可以参考下面这种写法
mapper.update(
    null,
    Wrappers.<User>lambdaUpdate()
       .set(User::getAge, 3)
       .set(User::getName, "mp")
       .set(User::getEmail, null) //把email设置成null
       .eq(User::getId, 2)
);

insertStrategy updateStrategy whereStrategy 
insertStrategy 在insert操作时的字段策略,是否进行空值判断,插入空值
updateStrategy 在update操作时的字段策略,是否进行空值判断,插入空值
whereStrategy 在where条件组装时,是否进行控制判断,将空值作为查询条件

MyBatis-Plus:updateById方法更新不了空字符串或NULL问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/192760.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!