2023-07-24 18:09:30 基础资料 围观 483 次
一、问题描述
在日常项目开发过程中,经常会使用Mybatis-plus的updateById()方法,快速将接收道德参数或者查询结果中原本不为null的字段更新为null,并且该字段在数据库中可为null,这个时候使用updateById()并不能实现这个操作,不会报错,但是对应的字段并没有更新为null。
二、问题原因
Mybatis-plus的字段策略(FieldStrategy)有三种策略:
而默认的更新策略是NOT_NULL:非NULL; 即通过接口更新数据时数据为NULL值时将不更新进数据库。
三、解决方案
update table A set 字段a = null where 字段b = 条件 2.设置全局的FieldStrategy 在配置文件中修改全局策略 #properties文件格式: mybatis-plus.global-config.db-config.field-strategy=ignored #yml文件格式: mybatis-plus: global-config: #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断" field-strategy: 0 这样做是进行全局配置,在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,可能会影响其它业务数据的准确性。不推荐使用此方法。 3.对指定的字段单独设置field-strategy 根据具体情况,在需要更新的字段中调整验证注解,如验非空: @TableField(strategy=FieldStrategy.NOT_EMPTY) 这样的话,我们只需要在需要更新为null的字段上,设置忽略策略,如下: @TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy; 设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。 4.使用update方法结合UpdateWrapper方式更新 User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
update table A set 字段a = null where 字段b = 条件
2.设置全局的FieldStrategy 在配置文件中修改全局策略 #properties文件格式: mybatis-plus.global-config.db-config.field-strategy=ignored #yml文件格式: mybatis-plus: global-config: #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断" field-strategy: 0 这样做是进行全局配置,在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,可能会影响其它业务数据的准确性。不推荐使用此方法。 3.对指定的字段单独设置field-strategy 根据具体情况,在需要更新的字段中调整验证注解,如验非空: @TableField(strategy=FieldStrategy.NOT_EMPTY) 这样的话,我们只需要在需要更新为null的字段上,设置忽略策略,如下: @TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy; 设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。 4.使用update方法结合UpdateWrapper方式更新 User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
在配置文件中修改全局策略
#properties文件格式: mybatis-plus.global-config.db-config.field-strategy=ignored #yml文件格式: mybatis-plus: global-config: #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断" field-strategy: 0 这样做是进行全局配置,在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,可能会影响其它业务数据的准确性。不推荐使用此方法。 3.对指定的字段单独设置field-strategy 根据具体情况,在需要更新的字段中调整验证注解,如验非空: @TableField(strategy=FieldStrategy.NOT_EMPTY) 这样的话,我们只需要在需要更新为null的字段上,设置忽略策略,如下: @TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy; 设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。 4.使用update方法结合UpdateWrapper方式更新 User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
#properties文件格式: mybatis-plus.global-config.db-config.field-strategy=ignored #yml文件格式: mybatis-plus: global-config: #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断" field-strategy: 0 这样做是进行全局配置,在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,可能会影响其它业务数据的准确性。不推荐使用此方法。
这样做是进行全局配置,在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,可能会影响其它业务数据的准确性。不推荐使用此方法。
3.对指定的字段单独设置field-strategy 根据具体情况,在需要更新的字段中调整验证注解,如验非空: @TableField(strategy=FieldStrategy.NOT_EMPTY) 这样的话,我们只需要在需要更新为null的字段上,设置忽略策略,如下: @TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy; 设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。 4.使用update方法结合UpdateWrapper方式更新 User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
根据具体情况,在需要更新的字段中调整验证注解,如验非空:
@TableField(strategy=FieldStrategy.NOT_EMPTY)
这样的话,我们只需要在需要更新为null的字段上,设置忽略策略,如下:
@TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy; 设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。 4.使用update方法结合UpdateWrapper方式更新 User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
@TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy; 设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。
设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。
4.使用update方法结合UpdateWrapper方式更新 User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); 这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
文章来源:https://blog.csdn.net/Czh3616x/article/details/128641472 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:[email protected]进行投诉反馈,一经查实,立即删除! 上一篇: Java程序调用Linux的shell脚本出现No such file or directory 下一篇: jdk11 下载与安装(非常详细,一步不落!!!) poi库简单使用(java如何实现动态替换模板Word内容) Java判断范围型的数据是否存在重叠(数值类型、日期类型) Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版 已解决java.lang.UnsatisfiedLinkError异常的正确解决方法,亲测有效!!! 吃透 JVM 诊断方法与工具使用
文章来源:https://blog.csdn.net/Czh3616x/article/details/128641472 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:[email protected]进行投诉反馈,一经查实,立即删除!
上一篇: Java程序调用Linux的shell脚本出现No such file or directory 下一篇: jdk11 下载与安装(非常详细,一步不落!!!) poi库简单使用(java如何实现动态替换模板Word内容) Java判断范围型的数据是否存在重叠(数值类型、日期类型) Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版 已解决java.lang.UnsatisfiedLinkError异常的正确解决方法,亲测有效!!! 吃透 JVM 诊断方法与工具使用
上一篇: Java程序调用Linux的shell脚本出现No such file or directory 下一篇: jdk11 下载与安装(非常详细,一步不落!!!)