目录

一、起因

二、网上的解决方案,我这里不适用

三、真正的解决之道,完美

看最终的配置方式:


一、起因

业务需要对Oracle数据库的某个字段进行set为Null的操作。网上找了很多帖子,不外乎那么几种解决办法,但都讲的不完全对,而且对我的场景不适用,大白话就是没用!

二、网上的解决方案,我这里不适用

1.全局配置:这种方案不考虑,因为只有这个表的这个字段需要更新为null,其他的表字段不需要更新null

2.在要更新为null的字段上加上注解 strategy = FieldStrategy.IGNORED。

这个值默认是要进行非空检查的,来看源码:

//字段策略枚举类
public enum FieldStrategy {IGNORED(0, "忽略判断"),NOT_NULL(1, "非 NULL 判断"),NOT_EMPTY(2, "非空判断");//省略部分代码
}

我们要的效果是此处忽略非空检查,所以应该如下配置:

@TableField(value = "BIRTHDAY",strategy = FieldStrategy.IGNORED)
private Date birthday;

这里要说一句,其实全局配置也是更改这个默认值,但你改了全局,你觉得行吗?不行滴,小胸弟!!!

重点来了,网上的教程都是到这里就OK了,但不好意思,我的配置了之后依然报错。不行啊,大胸弟!!!

三、真正的解决之道,完美

配置了上面的选项后,依然报错,提示javaType的类型是other,看了一下源码,果然javaType的默认值是other。

接下来重点又来了,对于如何配置javaType,网上的解决方案是自己写sql语句,在sql里面指定javaType,如下所示:

<insert id="save" parameterType="com.tarena.entity.Cost">insert into cost values(cost_seq.nextval,#{name,jdbcType=VARCHAR},#{base_duration,jdbcType=INTEGER},#{base_cost,jdbcType=DOUBLE})
</insert>

这种方案我没尝试,应该是可以的。但是,但是,但是,我们为什么要用Mybatis Plus吗,大家想想,不就是为了不写SQL吗,如果要写SQL我还废什么话,写SQL他也不会给我报上面的错误。所以,任性,我就是不想写SQL,那么,下面就是终极解决方案。

Mybatis Plus支持通过el表达式指定javaType。先来看下源码怎么说的,源码里面说的很清楚了。

    /*** <p>* 当该Field为类对象时, 可使用#{对象.属性}来映射到数据表.* </p>* <p>* 支持:@TableField(el = "role, jdbcType=BIGINT)<br>* 支持:@TableField(el = "role, typeHandler=com.baomidou.springcloud.typehandler.PhoneTypeHandler")* </p>*/String el() default "";

还是不知道怎么用?

看最终的配置方式1:

    /** 检验结果单位(码值:lab_result_unit)*/@TableField(value="lab_result_unit",strategy = FieldStrategy.IGNORED,el = "labResultUnit,jdbcType=DECIMAL")private Integer labResultUnit;

最终配置方式2:

修改application.yml:

mybatis-plus:configuration:jdbc-type-for-null: 'null' #注意:单引号

网上很多文章都针对自己的场景能解决问题,但真的还是具体问题需要具体分析,最终才能找到适合自己问题的解决之道。


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考文章

  1. https://blog.csdn.net/Weixiaohuai/article/details/88049036
  2. https://blog.csdn.net/forever_insist/article/details/91536452
  3. https://www.cnblogs.com/guanghe/p/9317476.html

使用Mybatis-plus更新null字段的解决方案相关推荐

  1. Mybatis优雅存取json字段的解决方案 - TypeHandler (一)

    起因 在业务开发过程中,会经常碰到一些不需要检索,仅仅只是查询后使用的字段,例如配置信息,管理后台操作日志明细等,我们会将这些信息以json的方式存储在RDBMS表里 假设某表foo的结构如下,字段b ...

  2. updatebyprimarykeyselective怎么更新某个字段为null_一千个不用 Null 的理由

    1.NULL 为什么这么多人用? 2.是不是以讹传讹? 3.给我一个不用 Null 的理由? Refer <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理 ...

  3. mybatis查询返回null解决方案

    mybatis查询返回null解决方案 参考文章: (1)mybatis查询返回null解决方案 (2)https://www.cnblogs.com/zipon/p/6361661.html 备忘一 ...

  4. 【解决方案】Oracle插入/更新CLOB字段报ORA-01704:字符串文字太长

    [解决方案]Oracle插入/更新CLOB字段报ORA-01704:字符串文字太长 解决办法: 1.如果插入的SQL比较少,那么可以人工处理.方法是使用PLSQL Developer软件,命令为:se ...

  5. MyBatis 多表关联相同字段的解决方案

    多表关联查询有相同字段的解决方案 问题描述 现场还原 解决方案 总结反思 问题描述 我们要对数据库中的两张表进行管理查询,但是不幸的是这两张表有相同的字段名,导致最后查询出来的结果里这两个字段的值是相 ...

  6. Mybatis批量更新转

    Mybatis批量更新 批量操作就不进行赘述了.减少服务器与数据库之间的交互.网上有很多关于批量插入还有批量删除的帖子.但是批量更新却没有详细的解决方案. 实现目标 这里主要讲的是1张table中.根 ...

  7. Mybatis关于int类型字段的判断

    出现问题: 有一个字段waterNum 为int类型,在更新语句时判断不为null或空字符串时,更新该字段,问题在于,当waterNum为0的时候,该字段不更新了 代码示例: <if test= ...

  8. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  9. 当mybatisPlus与tk.mybatis遇到更新

    前言 今天其实也没啥好说的,最近都是在赶工期CRUD,没有时间也没有场景做技术提升.今天主要是来说下Mybatis的ORM框架在做数据更新时的对比.mybatisPlus与tk.mybatis的更新操 ...

最新文章

  1. 在studio中使用libsdl2.so,编译SDL Demo
  2. 超图 for javascript 版本入门程序讲解
  3. 微软的python开发工具_面向 Python 开发人员的 Azure 工具
  4. 关于集体生活和个人生活的思考
  5. centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
  6. 巩膜(眼白)灰色原因
  7. eclipser认java源码_java相关:Eclipse查看开发包jar里源代码的方法
  8. Django实战(1):需求分析和设计
  9. 微信小程序php实现登陆的代码,微信小程序实现微信登录
  10. mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记
  11. SAP License:SAP的联产品和副产品
  12. [USACO13JAN]Square Overlap【模拟】
  13. amd 服务器cpu型号怎么看,AMD CPU型号识别方法图解
  14. python 视频清晰度_python识别视频黑屏或者低清晰度
  15. 金山Wps珠海实习杂记(一)
  16. java 自定义语言 解析_视频讲解 Java 语言基础编程题(自定义异常类,IO 流)
  17. PDF怎么删除空白页,PDF删除空白页的方法
  18. Codeforces Round #670 (Div. 2) C D E
  19. git安装 苹果笔记本_远程系统重装安装电脑维修笔记本台式xpwin7810苹果mac双系统安装...
  20. 统一文档服务器,统一标准化文档oraclei服务器安装基础手册.doc

热门文章

  1. 使用Visual Studio进行单元测试
  2. AIX上增加逻辑卷时报错误0516-787 extendlv: Maximum allocation for logical volume
  3. 基本控件Password控件
  4. java中的 FileWriter类 和 FileReader类的一些基本用法
  5. 关于get_magic_quotes_gpc()函数
  6. Oracle中for update造成锁表,致使无法删除或更新表内容
  7. 清结算内部勾兑业务一个比较有意思的问题整理
  8. java 1.6.0.11_ubuntu 11.10安装java1.6(转)
  9. php查询排序,php如何对查询结果集进行排序
  10. 国外的老师是怎么教Golang的?