Mybatis-plusupdateById()方法不能更新字段为null的原因及解决办法
Posted Cc阿正
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-plusupdateById()方法不能更新字段为null的原因及解决办法相关的知识,希望对你有一定的参考价值。
【Mybatis-plus】updateById()方法不能更新字段为null的原因及解决办法
一、问题描述
在日常项目开发过程中,经常会使用Mybatis-plus的updateById()方法,快速将接收道德参数或者查询结果中原本不为null的字段更新为null,并且该字段在数据库中可为null,这个时候使用updateById()并不能实现这个操作,不会报错,但是对应的字段并没有更新为null。
二、问题原因
Mybatis-plus的字段策略(FieldStrategy)有三种策略:
- IGNORED:0 忽略
- NOT_NULL:1 非 NULL,默认策略
- NOT_EMPTY:2 非空
而默认的更新策略是NOT_NULL:非NULL; 即通过接口更新数据时数据为NULL值时将不更新进数据库。
三、解决方案
1.直接在mapper.xml中写sql:
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。
卡方检验结果怎么看呀,
卡方检验试用条件1.随机样本数据;
2.卡方检验的理论频数不能太小.
两个独立样本比较可以分以下3种情况:
1.所有的理论数T≥5并且总样本量n≥40,用Pearson卡方进行检验.
2.如果理论数T<5但T≥1,并且n≥40,用连续性校正的卡方进行检验.
3.如果有理论数T<1或n<40,则用Fisher’s检验.
上述是适用于四格表.
R×C表卡方检验应用条件:
1.R×C表中理论数小于5的格子不能超过1/5;
2.不能有小于1的理论数.
若不符合R×C表的卡方检验.可以通过增加样本数、列合并来实现.
统计专业研究生工作室原创,请勿复杂粘贴 参考技术A 一个是看卡方值,另一个是看卡方值对应的p值,也就是sig值,尤其是sig,如果sig0.05的话则无充分理由认为实际与期望有差异或者是两变量相关。
以上是关于Mybatis-plusupdateById()方法不能更新字段为null的原因及解决办法的主要内容,如果未能解决你的问题,请参考以下文章