Mybatis plus通过updateById()更新字段为Null

本文介绍了Mybatis plus中updateById()方法在遇到字段值为null时不会更新到数据库的问题,并提供了三种解决策略:全局配置FieldStrategy为IGNORED,字段注解调整,以及使用UpdateWrapper进行条件更新。建议使用字段注解方式,以避免不必要的数据更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于Mybatis plus默认的更新策略是NOT_NULL:非 NULL;即通过接口更新数据时数据为NULL值时将不更新进数据库。所以Mybatis plus通过updateById(XXX)更新数据,当用户有更新字段为 空字符串 或者 null 的需求时,需要对 FieldStrategy 策略进行调整。
 

FieldStrategy 有三种策略:

IGNORED:0 忽略
NOT_NULL:1 非 NULL,默认策略
NOT_EMPTY:2 非空

 

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

注入配置 GlobalConfiguration 属性 fieldStrategy

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

缺点:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null

 

方式二:调整字段验证注解(推荐)

根据具体情况,在需要更新为Null的字段中调整验证注解:

@TableField(updateStrategy=FieldStrategy.IGNORED)
@ApiModelProperty(value = "原始数据文件大小(单位:kb,0表示不存储)")
private Integer sizeRawData;

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

//updateAllColumnById(entity) // 全部字段更新: 3.0已经移除
mapper.update(
   new User().setName("mp").set
### 解决方案概述 在 MyBatis-Plus 中,由于默认采用 `FieldStrategy.NOT_NULL` 策略,这使得更新操作不会处理值为 `null` 的字段。为了能够成功地将字段更新为 `null`,可以采取多种方法来实现这一目标。 #### 方法一:全局配置 FieldFill 属性 通过修改全局配置文件中的 `field-strategy` 参数,将其设置为 `IGNORED` 或其他适当选项,可以让框架忽略非空校验并允许 `null` 值被写入数据库表中[^4]。 ```yaml mybatis-plus: global-config: db-config: field-strategy: IGNORED ``` 这种方法适用于整个应用程序范围内的所有实体类及其映射关系。 #### 方法二:使用 UpdateWrapper 设置特定字段为空 对于单次更新需求而言,可以直接利用 `UpdateWrapper` 来构建条件表达式,并显式指明哪些字段应该被设为 `null`[^5]: ```java UpdateWrapper<YourEntity> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", entityId) .set("your_field_name", null); yourMapper.update(null, updateWrapper); ``` 这种方式灵活性较高,可以根据实际业务逻辑动态调整需要清空的数据项。 #### 方法三:自定义 SQL 片段或 Mapper 接口扩展 如果上述两种途径仍不能满足复杂的应用场景,则考虑编写专门针对该功能点的 XML 文件片段或是继承 BaseMapper 创建新的 DAO 层接口,在其中定义个性化的 CRUD 操作语句。 例如可以在 mapper xml 文件内加入如下 sql 节点: ```xml <update id="updateSomeFieldsToNull"> UPDATE your_table SET some_column = NULL WHERE id = #{id} </update> ``` 再配合对应的 Java Interface 定义相应的方法签名即可调用此定制化查询。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值