MyBatisPlus当字段为null时也更新该字段解决方法

在 MyBatisPlus 中,如果希望即使字段值为 null 也进行更新,这实际上是默认行为。但是,如果你遇到了某些特殊情况导致 null 值没有被更新,或者需要明确地确认这一点,可以通过以下几种方式进行操作:

1. 直接使用 updateById 方法
MyBatisPlus 的 updateById 方法默认会将 null 值的字段更新到数据库中。只需确保传入的实体对象中的字段值为 null 即可。

YourEntity entityToUpdate = new YourEntity();
entityToUpdate.setId(id); // 确保设置主键
// 设置为 null 的字段值
entityToUpdate.setName(null);

yourEntityMapper.updateById(entityToUpdate);

2. 使用 LambdaUpdateWrapper 或 UpdateWrapper
如果使用 LambdaUpdateWrapper 或 UpdateWrapper 进行更新操作,也可以明确地设置字段为 null。

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;

// ...

LambdaUpdateWrapper<YourEntity> wrapper = new LambdaUpdateWrapper<>();
// 添加其他条件
// wrapper.eq(YourEntity::getId, id);

YourEntity entityToUpdate = new YourEntity();
// 设置为 null 的字段值
entityToUpdate.setName(null);

yourEntityMapper.update(entityToUpdate, wrapper);

3. 明确设置 SQL 更新语句
如果需要更精细的控制,可以使用 MyBatisPlus 提供的 update 方法结合自定义的 SQL 语句来更新 null 值。

String sql = "UPDATE your_table SET column_name = ? WHERE id = ?";
yourEntityMapper.execute(sql, new Object[]{null, id});

 4  @TableField 注解配置

将 updateStrategy 属性设置为 FieldStrategy.NOT_NULL 或者移除该属性。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.FieldStrategy;

public class YourEntity {
    //FieldStrategy.NOT_NULL:不是 null 则更新,也就是说字段值为 null 则不生成字段 
    //FieldStrategy.NOT_EMPTY:不是空则更新,也就是该字段值为 null 或者 “”(空字符串) 
    //FieldStrategy.DEFAULT:默认,和全局配置保持一致,也就是和下面的第四种方式中的配置保持一致 
    //FieldStrategy.IGNORED:忽略判断,忽略该字段值不论是什么,都进行更新
    
    @TableField(value = "user_name", updateStrategy = FieldStrategy.IGNORED)
    private String userName;

    // 或者完全移除 updateStrategy 属性
    @TableField(value = "user_name")
    private String userName;

    // ...
}

注意事项
确保字段允许 null 值:在数据库设计时,请确保那些你想要设置为 null 的字段允许 null 值。
检查实体映射:确认实体类和数据库表之间的映射关系正确无误,特别是对于 null 值的处理。
通过上述方法之一,你可以确保即使字段值为 null 也会被更新到数据库中。如果还有其他问题,请提供更多详细信息以便进一步帮助。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值