mybatisplus updateById 设置空
时间: 2025-01-18 13:58:15 浏览: 100
### MyBatisPlus `updateById` 方法设置字段为 Null 的解决方案
当使用 MyBatisPlus 的 `updateById()` 方法尝试将某些字段更新为 `null` 时,可能会遇到这些字段并未实际被更新的情况。这主要是由于默认情况下,MyBatisPlus 不会处理实体类中的 `null` 值。
为了使 `updateById()` 能够成功地将指定字段设为 `null`,可以采取以下几种方式:
#### 方案一:自定义 SQL 更新语句
通过编写特定的 XML 映射文件来覆盖默认行为,从而允许手动控制哪些字段应该被置空。这种方式提供了最大的灵活性,但也增加了维护成本。
```xml
<update id="updateEntity">
UPDATE table_name SET
column1 = #{entity.column1},
column2 = IF(#{entity.column2} IS NULL, NULL, #{entity.column2}),
...
WHERE id = #{id}
</update>
```
此方法适用于复杂场景下的精确控制[^1]。
#### 方案二:配置全局策略
可以在应用程序启动时配置全局属性,使得所有 `null` 字段都将参与更新操作。具体来说,在 Spring Boot 应用程序中可以通过修改 `application.properties` 或者 `application.yml` 文件实现这一点:
对于 properties 文件:
```properties
mybatis-plus.global-config.db-config.id-type=auto
mybatis-plus.global-config.field-strategy=not_null_update
```
而对于 yml 文件则是这样的形式:
```yaml
mybatis-plus:
global-config:
db-config:
field-strategy: not_null_update
```
上述配置意味着只有那些非 `null` 的字段会被用于插入或更新操作;而如果希望即使存在 `null` 值也能够触发更新,则应改为 `all_column_update`[^2]。
#### 方案三:利用 Wrapper 来构建条件
借助于 `UpdateWrapper<T>` 类型的对象,可以直接指明要更新的具体列及其新值(包括 `null`)。这种方法既简单又直观,并且不需要改变任何现有代码结构。
```java
User user = new User();
user.setId(id);
// 设置想要清空的目标字段
user.setGuardianId(null);
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("id", id).set("guardian_id", null);
userService.update(user, wrapper);
```
这段代码展示了如何创建一个带有明确设定项 (`guardian_id`) 和匹配条件 (`id`) 的更新请求[^3]。
综上所述,针对不同的需求可以选择合适的方式来解决问题。无论是采用更灵活的手动SQL映射还是调整框架级别的参数设置,亦或是运用便捷的封装工具类,都能有效地让 `updateById()` 支持对目标记录的部分字段赋值为 `null`。
阅读全文
相关推荐


















