mybatisPlus中的updateById无法更新null值的字段

今天遇到了一个问题,至今未找到原因(只好换了一种方式解决问题先)

本人使用的mybatis-plus 版本是2.0.7

很多人都碰到过这个问题,使用mybatis-plus时,更新操作时,默认情况下如果字段为null是不会进行修改的

查询了网上的一些解决办法,

【第一种方法】:全局配置方式
在MyBatis-Plus配置文件中修改field-strategy字段验证的值为0,即忽略判断。
但是这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,这个不是我想要的(因此不考虑这个)
【第二种方法】:对需要的字段的验证策略进行修改
选用的这种方式
由于使用的mybatis-plus版本是2.0.7 , TableField注解中并没有strategy,对字段进行验证使用的是validate

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.baomidou.mybatisplus.enums.FieldStrategy;
/**
 * <p>
 * 表字段标识
 * </p>
 *
 * @author hubin sjy
 * @since 2016-09-09
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TableField {
    /**
     * <p>
     * 字段值(驼峰命名方式,该值可无)
     * </p>
     */
    String value() default "";
    /**
     * <p>
     * 当该Field为类对象时, 可使用#{对象.属性}来映射到数据表.
     * </p>
     * <p>
     * 支持:@TableField(el = "role, jdbcType=BIGINT)<br>
     * 支持:@TableField(el = "role, typeHandler=com.baomidou.xx.typehandler.PhoneTypeHandler")
     * </p>
     */
    String el() default "";
    /**
     * <p>
     * 是否为数据库表字段
     * </p>
     * <p>
     * 默认 true 存在,false 不存在
     * </p>
     */
    boolean exist() default true;
    /**
     * <p>
     * 字段验证
     * </p>
     * <p>
     * 默认 非 null 判断
     * </p>
     */
    FieldStrategy validate() default FieldStrategy.NOT_NULL;
}

因此对字段进行验证的写法为

@TableField(value = "product_code", validate =FieldStrategy.IGNORED)
	private String productCode;
/**
 * <p>
 * 字段策略枚举类
 * </p>
 *
 * @author hubin
 * @Date 2016-09-09
 */
public enum FieldStrategy {
    IGNORED(0, "ignored"), NOT_NULL(1, "not null"), NOT_EMPTY(2, "not empty");

遗留问题

其实之前就已经使用过这种方式来进行操作了,并且是有效果的。但是今天这样写,却发现有问题。
当新增数据的时候,字段对应的值并没有被写入到数据库中。查询数据该字段返回值为null, 修改的时候是可以成功的。
尝试了半天仍然没有找到问题所在。

有遇到过此问题的同学可以交流下。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,有两种方案可以将字段设置为null进行更新。 方案1是使用UpdateWrapper更新,代码示例如下: ``` @Autowired private UserService userService; @ApiOperation("修改") @PostMapping("/edit") public void edit(User user) { userService.lambdaUpdate() .eq(User::getId, user.getId()) .set(User::getUserName, user.getUserName()) .set(User::getNickName, null) .update(); } ``` 在这个方案,使用了lambda表达式来指定更新条件,eq方法用于设定更新的用户id,set方法用于设置userName字段为指定,set方法可以设置字段null。 方案2是设置全局的field-strategy,不推荐使用。在这个方案,通过在需要更新null字段上设置忽略策略。示例如下: ``` /** * 昵称 */ @TableField(strategy = FieldStrategy.IGNORED) private String nickName; ``` 这样设置之后,在执行updateById方法时,会忽略该字段更新操作。 因此,你可以选择以上两种方案的一种来实现mybatisplus更新updateById字段null的需求。123 #### 引用[.reference_title] - *1* *2* *3* [Mybatis-Plus--update(), updateById()将字段更新null](https://blog.csdn.net/feiying0canglang/article/details/125523684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值