目前,越来越多人选择mybatis-plus作为数据持久层的方案。在研发过程中有时候研发同学需要将数据库中的字段数据置为NULL的场景。这时候就有可能遇到赋值为null的字段不生效。
原因分析:
MyBatis-Plus采用了有三种字段验证策略:
- IGNORED(0): “忽略判断”, 所有字段都更新和插入
- NOT_NULL(1):“非 NULL 判断”, 只更新和插入非NULL值【默认】
- NOT_EMPTY(2):“非空判断”,只更新和插入非NULL值且非空字符串
没有对字段验证策略进行配置的时候,默认的方式是NOT_NULL。所以造成了NULL无法更新。
解决方法:
1.全局配置方式(不推荐)
在配置文件中添加:mybatis-plus.global-config.db-config.update-strategy=ignored
2.单字段推荐注解(推荐)
在数据库实体类的需要修改的字段上添加如下注解:
@TableField(value = "XXXX", updateStrategy = FieldStrategy.IGNORED,jdbcType = JdbcType.VARCHAR)
添加完配置后我们会发现该字段就能变为NULL了。但是没有需要修改的字段也被修改为了null。我们可以通过下面两种方案解决问题。
1.利用Wrappers.lambdaUpdate()解决问题
LambdaUpdateWrapper<UserVo> objectUpdateWrapper = Wrappers.lambdaUpdate();
objectUpdateWrapper.eq(UserVo::getId, 20);
objectUpdateWrapper.set(UserVo::getAddress, null);
mapper.update(null, objectUpdateWrapper);
2.执行的update的对象是先通过查询数据库得到的,然后对需要修改的字段赋值,最后使用update进行修改。【推荐】