mybatisplus 修改某个字段为空值

本文探讨了在使用MyBatisPlus时遇到的空值更新问题,详细介绍了如何通过`@TableField`注解的`strategy`和`fill`属性来解决。当尝试将企业ID字段设置为null时,原始方法导致异常。解决方案包括使用`NOT_EMPTY`策略或指定`UPDATE`填充策略。此外,还发现不同类型的字段对空值的处理方式不同,如String类型的字段可以直接设为空字符串进行更新,而Date或Integer类型的字段则不行。最后,建议根据具体业务场景选择合适的方法,或者直接编写SQL来处理空值更新。

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


前言

需求: 移除企业;将ent_id设置为null

一、重现bug

1,使用updateById()更新单独个字段为空值,结果报错。

    @Override
    public void update(String id,String type) {
        Student stu = new Student();
        stu.setEntId(null); // 会报异常
        stu.setId(id);
        studentService.updateById(stu);
	}

二、解决方法

方法1:@TableField(strategy= FieldStrategy.NOT_EMPTY)
方法2:@TableField(value = “ent_id”, fill = FieldFill.UPDATE)


entity

	/**
	 * 所属企业id
	 */
    @TableField(strategy= FieldStrategy.NOT_EMPTY)
    private String entId;

service

    @Override
    public void update(String id,String type) {
        Student stu = new Student();
        stu.setEntId(null); // 不报错
        stu.setId(id);
        studentService.updateById(stu);
	}

补充:
有时候需要将数据库的某个字段由原来有值修改为空值。当调用mybatisplus提供修改方法studentService.saveOrUpdate(student); 遇到空值,它不做为修改字段。

	/**
	 * 所属企业id
	 */
	@TableField(value = "ent_id",fill = FieldFill.UPDATE)
    private String entId;

链接: (官网)插入或更新的字段有-空字符串-或者-null.

验证:字符串是可以直接赋值空,然后进行删除的。
在这里插入图片描述

if (CollectionUtil.isNotEmpty(idList)) {
  List<PurchaseRequestItem> entList = Lists.newArrayList();
    for (String id : idList) {
        PurchaseRequestItem item = new PurchaseRequestItem();
        item.setId(id);
        item.setFbk2("");
        entList.add(item);
    }
    purchaseRequestItemService.updateBatchById(entList);
    System.out.println("12321"+entList);
}

总结

1,使用mybatisplus的置空方法作用不大,因为一个entity有可能涉及到多个业务层的使用,推荐还是自己写sql。
即如果当前用户被移除企业的时候,就调用Dao的修改方法,将企业id设置为null值。

2,查阅资料,得知mybatisplus不支持修改空值。
如果需要修改为空值,需要用到主键@TableField(strategy=FieldStrategy.NOT_EMPTY)

(2022年8月5日 第1点的补充)
3,fill = FieldFill.UPDATE 这个可以实现空值修改
(2022年8月22日)
4,发现:mybatisplus 空值修改发现一个规律:String类型赋值“”,是可以直接修改的;只有Date类型,BigDecimal类型,Integer类型等遇到空值(null、“”)的赋值不会作为修改字段。–2023年8月23日 验证+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值