mybatis-puls在使用修改语句的时候,没有报异常,但是修改的部分字段不生效,打印修改的数据语句,发现部分字段传进来的属性值是null,然后mybatis-puls修改的时候,发现这个字段是null,就忽略此字段的修改,但实际上,我们就是需要这个字段修改为null,没有操作成功的原因,是因为mybatis-puls在执行修改时,对字段的验证策略,我们看一下@TableField这个注解
在进行修改操作时设置全局的field-strategy,默认的策略是DEFAULT(mybatis-plus版本不一样,FieldStrategy
枚举值也不一致),这个时候进行更改操作的时候,如果属性值为null,则不进行修改,所以就出现了我们操作不成功的情况。
解决这个问题,有三种方式:
1、设置全局的field-strategy
mybatis-plus: mapper-locations: classpath:mapper/*Mapper.xml global-config: # 数据库相关配置 db-config: #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断" field-strategy: not_null
全局性配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。
2、对特殊字段设置单独的field-strategy
mybatis-plus 3.0.7版本中,策略字段
mybatis-plus 3.5.1版本中,策略字段
版本不一致,字段也不一样,要注意区分版本
3、 使用UpdateWrapper方式更新
在mybatis-plus中,除了updateById方法,还提供了一个update方法,直接使用update方法也可以将字段设置为null