MyBatis-Plus updateById不更新null值的方法解决
作者:一碗情深
用Mybatis-Plus的updateById()来更新数据时,无法将字段设置为null值,更新后数据还是原来的值,本文就来详细的介绍一下解决方法,具有一定的参考价值,感兴趣的可以了解一下
前言
在 MyBatis-Plus 中,使用updateById,null字段并不会更新,其实是和更新的策略有关,当然,也有插入策略,本文基于MyBatis-Plus3.5.2,对插入和更新策略做讲解。
方式一 调整全局的验证策略
注入全局配置,设置属性 insertStrategy
、updateStrategy
缺点:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null
mybatis-plus: global-config: db-config: insert-strategy: ignored # "忽略判断", 所有字段都插入 update-strategy: ignored # "忽略判断", 所有字段都更新
insertStrategy
、updateStrategy
属性的值有以下5种枚举类型:
ignored
“忽略判断”, 所有字段都更新或插入not_null
“非 NULL 判断”, 只更新或插入非NULL值not_empty
“非空判断”, 只更新或插入非NULL值且非空字符串default
如果字段的值不为null,则进行插入或者更新操作;如果字段的值为null,不执行操作,执行结果还是数据库原来的值或者默认值never
永远不进行插入或更新操作,即使字段的值不为null
方式二 调整字段验证注解
在属性上注解
根据具体情况,在需要更新或者插入的字段中调整验证注解,如忽略判断,任何情况都进行插入和更新操作:
@TableField(updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED)
方式三 使用 UpdateWrapper
如果没有设置 insert-strategy
、update-strategy
的值,默认为 default
使用以下方法来进行更新操作,无设置的值还是数据库原来的值,如下
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.set("name", "一碗情深") .set("url", "https://blog.csdn.net/xiaohuihui1400") .eq("id", 1); userMapper.update(null, updateWrapper);
或者使用lambda表达式,只有将属性赋值,数据库的值才会改变,如下,把email设置成null
mapper.update( null, Wrappers.<User>lambdaUpdate() .set(User::getName, "一碗情深") .set(User::getUrl, "https://blog.csdn.net/xiaohuihui1400") .set(User::getEmail, null) // 把email设置成null .eq(User::getId, 1) );
到此这篇关于MyBatis-Plus updateById不更新null值的方法解决的文章就介绍到这了,更多相关MyBatis-Plus updateById不更新null值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!