关于Mybatis-Plus Update更新策略问题

 更新时间:2021年11月26日 14:38:44   作者:真是适合睡觉的天气  
这篇文章主要介绍了关于Mybatis-Plus Update更新策略问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

问题

之前一直使用Mybatis,最近尝试使用Mybatis-Plus,却在updateById登录成功后更新最近登录时间出现了问题,一般业务操作都是更新不为空的字段,结果发现更新了所有字段(居然还有这种问题)

Mybatis-Plus版本:

原因

mybatis-plus FieldStrategy 有三种策略:

  • IGNORED:0 忽略
  • NOT_NULL:1 非 NULL,默认策略
  • NOT_EMPTY:2 非空

而默认更新策略是NOT_NULL:非 NULL;即通过接口更新数据时数据为NULL值时将不更新进数据库。

我在yml中并没有配置这一参数,所以我的配置是默认的策略是NOT_NULL,也就是说如果参数是空字符串则会进行更新保存

官方链接:https://mp.baomidou.com/config/#updatestrategy

官方的解释是

updateStrategy

  • 类型:com.baomidou.mybatisplus.annotation.FieldStrategy
  • 默认值:NOT_NULL

字段验证策略之 update

说明:

在 update 的时候的字段验证策略 目前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link #fieldStrategy} 为准

selectStrategy(since 3.1.2)

  • 类型:com.baomidou.mybatisplus.annotation.FieldStrategy
  • 默认值:NOT_NULL

字段验证策略之 select

说明:

在 select 的时候的字段验证策略: wrapper 根据内部 entity 生成的 where 条件 目前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link #fieldStrategy} 为准

解决方法

寻找了一番,解决方法有三种

1、指定字段增加注解

在需要其他策略的字段设置忽略策略

@TableField(strategy=FieldStrategy.NOT_EMPTY)
  • 注解TanleField的strategy属性
  • NOT_NULL, 非NULL判断
  • NOT_EMPTY, 非空判断
  • DEFAULT, 默认
  • IGNORED,忽略判断

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更新

使用UpdateWrapper方式替换updateById

以上三种方式任选其一即可

mybatisplus进行update遇到的坑

前端传递的字段值为null,mybatisplus默认不会去修改字段值

加上注解:

@TableField(updateStrategy = FieldStrategy.IGNORED)

结果mybatisplus默认将null转为了空字符,实体类对象如下:

字段值为空字符而非null

数据库字段修改结果如下为:

数据库字段值为空字符而非null

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 包和访问权限操作

    Java 包和访问权限操作

    这篇文章主要介绍了Java 包和访问权限操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 教你用java完美封装微信模板消息的发送动态

    教你用java完美封装微信模板消息的发送动态

    这篇文章主要介绍了教你用java完美封装微信模板消息的发送动态,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • java虚拟机创建失败的原因整理

    java虚拟机创建失败的原因整理

    在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
    2020-02-02
  • 利用stream sorted进行降序排序

    利用stream sorted进行降序排序

    这篇文章主要介绍了利用stream sorted进行降序排序,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Java中的线程安全集合CopyOnWriteArrayList解析

    Java中的线程安全集合CopyOnWriteArrayList解析

    这篇文章主要介绍了Java中的线程安全CopyOnWriteArrayList解析,CopyOnWriteArrayList是ArrayList的线程安全版本,从他的名字可以推测,CopyOnWriteArrayList是在有写操作的时候会copy一份数据,然后写完再设置成新的数据,需要的朋友可以参考下
    2023-12-12
  • Springboot如何同时装配两个相同类型数据库

    Springboot如何同时装配两个相同类型数据库

    这篇文章主要介绍了Springboot如何同时装配两个相同类型数据库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Mybatis一对多与多对一查询处理详解

    Mybatis一对多与多对一查询处理详解

    这篇文章主要给大家介绍了关于Mybatis一对多与多对一查询处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java基础篇之HashMap指定初始值

    Java基础篇之HashMap指定初始值

    这篇文章主要给大家介绍了关于Java基础篇之HashMap指定初始值的相关资料,HashMap是Java中常用的数据结构,它提供了高效的键值对存储和查询功能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • spring mvc 读取xml文件数据库配置参数的方法

    spring mvc 读取xml文件数据库配置参数的方法

    下面小编就为大家带来一篇spring mvc 读取xml文件数据库配置参数的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java开发hutool HttpUtil网络请求工具使用demo

    java开发hutool HttpUtil网络请求工具使用demo

    这篇文章主要为大家介绍了hutool之HttpUtil网络请求工具使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07

最新评论