mybatis-plus 更新方法设置字段为空不起效果

项目场景:

最近在做一个需求的时候需要把数据库中的某个字段设置为空

问题描述

在代码中通过set方法对一个字段设置成null,发现并没有起作用

原因分析:

经过查询是因为mybatis-plus 默认的更新策略设置的问题,mybatis-plus中FieldStrategy 有三种策略:


•	IGNORED:忽略。不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null
•	NOT_NULL:非 NULL,默认策略。也就是忽略null的字段,不忽略""
•	NOT_EMPTY:非空。为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库

默认的是NOT_NULL,也就是忽略null字段,所以更新不成功。

解决方案:

需对 FieldStrategy 策略进行调整,有如下三种方式:

  • 方式一:调整全局的验证策略,如下:
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  typeAliasesPackage: com.test.application.test.admin.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 0
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 方式二:调整字段验证注解
    根据具体情况,在需要更新的字段中调整验证注解,如验证非空:
// An highlighted block
@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)
);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值