mybatisplus 修改字段为空
时间: 2025-02-22 13:24:04 浏览: 61
### 解决方案概述
当使用 MyBatis-Plus 需要更新字段为 `null` 时,默认行为是忽略这些 `null` 值,因此不会执行相应的更新操作。为了实现这一需求,可以通过多种方式来调整默认的行为。
#### 方法一:配置 @TableField 注解的字段策略
对于特定字段,在实体类中可以使用 `@TableField` 注解并设置其 `updateStrategy` 属性为 `FieldStrategy.IGNORED` 或者 `strategy = FieldStrategy.IGNORED` 来确保即使该字段值为 `null` 也会参与更新语句[^1][^4]。
```java
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String description;
```
这种方法适用于希望某些字段总是能够被更新的情况,无论它们是否含有实际数据还是 `null`。
#### 方法二:修改全局策略
如果项目中有大量类似的场景,可以在应用启动时通过配置文件或代码形式更改全局的 `update-strategy` 参数为 `ignored`,从而影响整个应用程序内的所有实体对象[^2]。
在 Spring Boot 应用程序中,这通常是在 `application.yml` 文件里完成:
```yaml
mybatis-plus:
global-config:
db-config:
update-strategy: ignored
```
此方法适合那些想要统一管理所有实体类更新逻辑的应用环境。
#### 方法三:编写自定义 SQL 实现强制更新
另一种更为灵活的方式就是绕过框架自动构建的功能而直接书写原始SQL语句来进行精确控制。这种方式虽然失去了部分便捷性和抽象层次的好处,但在特殊情况下非常有用。
例如利用 XML 映射文件中的 `<script>` 标签配合条件判断表达式来动态决定哪些列应该加入到最终生成的UPDATE命令之中:
```xml
<update id="updateById">
UPDATE table_name SET
<trim prefixOverrides=", " suffix=" WHERE id=#{id}">
<if test="name != null"> name=#{name},</if>
<if test="age == null"> age=null,</if> <!-- 特定条件下设为空 -->
</trim>
</update>
```
以上三种途径都可以有效地解决MyBatis Plus无法正常处理NULL值的问题,并允许开发者根据具体业务需求选择最合适的技术路线。
阅读全文
相关推荐


















