今天在改bug时,想要将实体类中的一个值改为null(原本是有值的),结果却发现编辑成功之后,数据却没有变化,如下:
@TableField(jdbcType = JdbcType.NUMERIC,updateStrategy = FieldStrategy.IGNORED)
我想将bornData这个字段赋值为null,根据原本猜想执行
baseMapper.updateById(sysUserInfo)就可以完成,但事实并非如此,查看控制台打印sql:
==> Preparing: UPDATE sch_sys_user SET school_id=?, username=?, password=?, mobile=?, sex=?, role_id=?, status=?, del_status=?, create_date=?, update_date=?, delete_flag=? WHERE Id=?
==> Parameters: 6(Integer), 嘻嘻嘻(String), b46fc7bf5e1394a1791278345583032f(String), 18800009876(String), 1(Integer), 22(Integer), 0(Integer), 0(Integer), 2022-08-26T14:13:44(LocalDateTime), 2022-08-27T15:53:04.344(LocalDateTime), 0(Integer), 155(Integer)
<== Updates: 1
发现其并没有修改该字段值,后来发现updateById方法,但是updateById默认不更新为null的值。
在字段上加上如下注解:
@TableField(jdbcType = JdbcType.NUMERIC,updateStrategy = FieldStrategy.IGNORED)
updateStrategy 是修改策略,默认为NOT_NULL,不能为null,,更改为IGNORED 即可忽略赋值null。
但是由于赋null,无法判读类型,所以需要为字段指定类型 jdbcType = JdbcType.NUMERIC
再次执行发现其sql打印如下:
==> Preparing: UPDATE sch_sys_user SET school_id=?, username=?, password=?, mobile=?, born_date=?, sex=?, role_id=?, status=?, del_status=?, create_date=?, update_date=?, delete_flag=? WHERE Id=?
==> Parameters: 6(Integer), 嘻嘻嘻(String), b46fc7bf5e1394a1791278345583032f(String), 18800009876(String), null, 1(Integer), 22(Integer), 0(Integer), 0(Integer), 2022-08-26T14:13:44(LocalDateTime), 2022-08-27T16:00:13.272(LocalDateTime), 0(Integer), 155(Integer)
<== Updates: 1
修改成功。