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 );

总结

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

相关文章

  • Java面试岗常见问题之ArrayList和LinkedList的区别

    Java面试岗常见问题之ArrayList和LinkedList的区别

    ArrayList和LinkedList作为我们Java中最常使用的集合类,很多人在被问到他们的区别时,憋了半天仅仅冒出一句:一个是数组一个是链表。这样回答简直让面试官吐血。为了让兄弟们打好基础,我们通过实际的使用测试,好好说一下ArrayList和LinkedList的区别这道经典的面试题
    2022-01-01
  • Spring Boot JPA访问Mysql示例

    Spring Boot JPA访问Mysql示例

    本篇文章主要介绍了Spring Boot JPA访问Mysql示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Java实现两人五子棋游戏(七) 屏幕提示信息

    Java实现两人五子棋游戏(七) 屏幕提示信息

    这篇文章主要为大家详细介绍了Java实现两人五子棋游戏,屏幕提示游戏信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • spring依赖注入成功但在调用接口的时候拿到的依赖却是null问题

    spring依赖注入成功但在调用接口的时候拿到的依赖却是null问题

    这篇文章主要介绍了spring依赖注入成功但在调用接口的时候拿到的依赖却是null问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • JAVA8之函数式编程Function接口用法

    JAVA8之函数式编程Function接口用法

    这篇文章主要介绍了JAVA8之函数式编程Function接口用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java集合之整体结构

    Java集合之整体结构

    Java中集合类是Java编程中使用最频繁、最方便的类。接下来通过本文给大家介绍Java集合之整体结构,一起看看吧
    2016-05-05
  • SpringBoot整合Mybatis-plus案例及用法实例

    SpringBoot整合Mybatis-plus案例及用法实例

    mybatis-plus是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于SpringBoot整合Mybatis-plus案例及用法实例的相关资料,需要的朋友可以参考下
    2022-11-11
  • Spring注解方式防止重复提交原理详解

    Spring注解方式防止重复提交原理详解

    这篇文章主要为大家详细介绍了Spring注解方式防止重复提交原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Spring boot 处理大文件上传完整代码

    Spring boot 处理大文件上传完整代码

    这篇文章主要介绍了Spring boot 处理大文件上传,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java基础之Comparable与Comparator概述

    Java基础之Comparable与Comparator概述

    这篇文章主要介绍了Java基础之Comparable与Comparator详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04

最新评论