关于Mybatis-Plus Update更新策略问题
作者:真是适合睡觉的天气 发布时间:2022-04-14 19:29:24
问题
之前一直使用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转为了空字符,实体类对象如下:
数据库字段修改结果如下为:
来源:https://blog.csdn.net/qq_38361800/article/details/106216614


猜你喜欢
- 前面有文章曾经地介绍过MediaPlayer的基本用法,这里就更加深入地讲解MediaPlayer的在线播放功能。本文主要实现MediaPl
- 到底什么是反射呢???反射的核心就是JVM在运行时才动态加载类或调用方法,访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。每
- 本文实例为大家分享了Java实现学生选课管理系统的具体代码,供大家参考,具体内容如下需求分析本数据库的用户主要是学生,通过对用户需求的收集和
- 需求:Android客户端连接服务器端MySQL数据库中的内容环境部署服务器:apache-tomcat-8.5.9语言版本:Java 1.
- 目录一、简介二、入门案例三、自定义认证逻辑四、自定义授权逻辑五、注销登录六、记住我功能七、会话管理一、简介Spring Security是一
- 主要注意的是在资源引用的地方AlertDialog.Builder(this,R.style.dialogNoBg).create();这里
- 使用idea进行JavaWeb开发时,在前端与后台交互常常出现乱码问题,包括日志/控制台输出乱码,参数乱码等问题,归根结底是编码格式不对,解
- Java计算一段程序的运行时间介绍了两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算。毫秒级别计算时间  
- 首先来看看以下程序将会打印出什么:class Dog { public static void bark
- 首先给大家展示下效果图,感觉还不错,请继续往下阅读:下拉刷新: 上划加载 &n
- 1.super介绍我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。用于访问父类的属性,方法,构造器2.super
- 日常工作中,不管你是写Unit Test,还是采用TDD的编程方式进行开发,都会遇到断言。而断言的风格常见的会有Assert、BDD风格,对
- 最近在看 C++ 的方法重载,我就在想 C# 中的重载底层是怎么玩的,很多朋友应该知道 C 是不支持重载的,比如下面的代码就会报错。#inc
- 1. 测试文档、期望达到的目标文档效果用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性:目标文档效果:2. 辅助工具2
- 使用SwingWorker线程模式谨慎地使用并发机制对Swing开发人员来说非常重要。一个好的Swing程序使用并发机制来创建不会失去响应的
- Springboot 内置tomcat禁止不安全HTTP方法1、在tomcat的web.xml中可以配置如下内容让tomcat禁止不安全的H
- 简介在Spring 5中,Spring MVC引入了webFlux的概念,webFlux的底层是基于reactor-netty来的,而rea
- Java反射机制一、什么是反射机制 简单的来
- 查看JDK1.8 ArrayList的源代码1、默认初始容量为10 /** * Default i
- 本文实例讲述了Android编程实现网络图片查看器和网页源码查看器。分享给大家供大家参考,具体如下:网络图片查看器清单文加入网络访问权限:&