mybatis中使用CASE WHEN关键字报错及解决

 更新时间:2022年12月13日 09:01:44   作者:南独酌酒nvn  
这篇文章主要介绍了mybatis中使用CASE WHEN关键字报错及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis使用CASE WHEN关键字报错

问题展现

如下图所示:当我直接在 mybatis 的 xml 文件中编写 CASE WHEN 语句后,执行到这个 SQL 的时候就会报这个错:

解决方案

使用 MybatisPlus 中的 @SqlParser 注解就可以解决此问题

mybatis Case When导致部分数据被置空的原因

在使用mybatis框架的时候经常会使用批量更新sql的语句,例如:

这样似乎一句sql能将该表中的所有字段进行更新比较省事,但是如果部分字段为空,会因为这个语句导致这条数据为空的字段变为null,

  • 第一条数据 id = 901, name = "啊啊啊", stock = null
  • 第二条数据 id = 902, name = null ,stock = 100

执行出来的sql就会变成这样。

update product set name = case id when 901 then '啊啊啊' when 902 then null end, stock = case id when 901 then null when 902 then 100 end
 WHERE id in ( 901 , 902 );

导致数据库的数据置空

如何避免

在then后面加一个ifnull判断,为空的话就让它等于自己

解析后的sql

update product set name = case id when 901 then ifnull('啊啊啊', name) when 902 then ifnull(null, name) end, stock = case id when 901 then ifnull(null, stock) when 902 then ifnull(100, stock) end
 WHERE id in ( 901 , 902 );

总结

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

相关文章

  • Spring如何通过@Lazy注解解决构造方法循环依赖问题

    Spring如何通过@Lazy注解解决构造方法循环依赖问题

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环,这篇文章主要给大家介绍了关于Spring如何通过@Lazy注解解决构造方法循环依赖问题的相关资料,需要的朋友可以参考下
    2023-03-03
  • Java中try catch 的基本用法示例

    Java中try catch 的基本用法示例

    这篇文章主要给大家介绍了关于Java中try catch 的基本用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • java 中JDBC连接数据库代码和步骤详解及实例代码

    java 中JDBC连接数据库代码和步骤详解及实例代码

    这篇文章主要介绍了java 中JDBC连接数据库代码和步骤详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • 深入浅出了解happens-before原则

    深入浅出了解happens-before原则

    一提到happens-before原则,就让人有点“丈二和尚摸不着头脑”。这个涵盖了整个JMM中可见性原则的规则,究竟如何理解,把我个人一些理解记录下来。下面可以和小编一起学习
    2019-05-05
  • win10设置java环境变量的方法

    win10设置java环境变量的方法

    下面小编就为大家带来一篇win10设置java环境变量的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • springboot项目配置swagger2示例详解

    springboot项目配置swagger2示例详解

    Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。本文重点给大家介绍springboot项目配置swagger2示例代码详解,需要的朋友参考下吧
    2021-09-09
  • 教你在JNA中将本地方法映射到JAVA代码中的示例

    教你在JNA中将本地方法映射到JAVA代码中的示例

    对于JNI来说,我们可以使用native关键字来定义本地方法。那么在JNA中有那些在JAVA代码中定义本地方法的方式呢?对JNA本地方法映射JAVA代码的相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • SpringCloud Config分布式配置中心使用教程介绍

    SpringCloud Config分布式配置中心使用教程介绍

    springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用
    2022-12-12
  • 使用maven的profile构建不同环境配置的方法

    使用maven的profile构建不同环境配置的方法

    这篇文章主要介绍了使用maven的profile构建不同环境配置的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 通过openpyxl读取excel文件过程解析

    通过openpyxl读取excel文件过程解析

    这篇文章主要介绍了通过openpyxl读取excel文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论