1 问题描述
在用mybatis-plus封装的updateById方法来更新数据时,想把一个字段设置为null值,但是发现更新后数据没有为null还是原来的值,这是因为mybatis-plus在更新的时候做了null判断,默认不更新为null的传参。
2 解决方法
(1)在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略null值的判断,例如
/**
* 治愈时间
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
private LocalDate cureData;
(2)使用update方法显式的设置允许空数据的字段值(推荐)
@Override
public void save(DrugRegisterBo drugRegisterBo) {
DrugRegisterBean drugRegisterBean = modelMapper.map(drugRegisterBo, DrugRegisterBean.class);
if (drugRegisterBean.getId() == null) {
drugRegisterMapper.insert(drugRegisterBean.setCreatetime(LocalDateTime.now()).setModifytime(LocalDateTime.now()));
} else {
drugRegisterMapper.update(drugRegisterBean, Wrappers.<DrugRegisterBean>lambdaUpdate()
.eq(DrugRegisterBean::getId, drugRegisterBean.getId())
.set(DrugRegisterBean::getProductDate, drugRegisterBean.getProductDate())
.set(DrugRegisterBean::getValidDate, drugRegisterBean.getValidDate())
.set(DrugRegisterBean::getSpecifications, drugRegisterBean.getSpecifications())
.set(DrugRegisterBean::getUseMethod, drugRegisterBean.getUseMethod())
.set(DrugRegisterBean::getContent, drugRegisterBean.getContent())
);
}
}