网站内容更新策略(关于Mybatis-PlusUpdate更新策略问题更新(-Plus))
优采云 发布时间: 2022-02-17 10:39网站内容更新策略(关于Mybatis-PlusUpdate更新策略问题更新(-Plus))
关于Mybatis-PlusUpdate更新策略
更新时间:2021-11-26 14:38:44 作者:真适合睡觉的天气
本文章主要介绍Mybatis-PlusUpdate的更新策略,有很好的参考价值,希望对大家有所帮助。如果有错误或没有考虑完整,请告诉我
内容
问题
之前一直在用Mybatis,最近尝试用Mybatis-Plus,但是updateById登录成功后更新最新登录时间出现问题。一般业务操作是更新不为空的字段,结果发现所有字段都更新了(还是有这样的问题)
Mybatis-Plus 版本:
原因
mybatis-plus FieldStrategy 有三种策略:
默认更新策略为NOT_NULL:非NULL;即通过接口更新数据时,当值为NULL时,数据不会更新到数据库中。
我在yml中没有配置这个参数,所以我的配置是默认策略是NOT_NULL,也就是说如果参数是空字符串,会更新保存
官方链接:
官方的解释是
更新策略
现场验证策略更新
操作说明:
更新期间的字段验证策略目前没有默认值。当 {@link #fieldStrategy} 完全删除时,将给出默认值 NOT_NULL。如果不匹配,请关注 {@link #fieldStrategy}。
选择策略(因为 3.1.2)
现场验证策略选择
操作说明:
选择时的字段验证策略:wrapper基于内部实体生成的where条件目前没有默认值。当 {@link #fieldStrategy} 被完全删除时,它会给出一个默认值 NOT_NULL。如果不匹配,请按 {@link #fieldStrategy} 作为允许
解决方案
经过搜索,有三种解决方案
1、给指定字段添加注解
在需要其他策略的字段中设置忽略策略
@TableField(strategy=FieldStrategy.NOT_EMPTY)
2、全局配置
添加 application.properties 或 application.yml 配置文件
# yml配置
mybatis-plus:
global-config:
db-config:
field-strategy: not_empty
# properties配置
mybatis-plus.global-config.db-config.field-strategy=not_empty
3、使用 UpdateWrapper 更新
将 updateById 替换为 UpdateWrapper
您可以选择以上三种方法之一
mybatisplus更新遇到的坑
前端传递的字段值为null,mybatisplus默认不会修改字段值。
添加注释:
@TableField(updateStrategy = FieldStrategy.IGNORED)
结果mybatisplus默认将null转为空字符,实体类对象如下:
数据库字段修改结果如下:
以上是我的个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。