解决mybatis case when 报错的问题

 更新时间:2021年02月03日 16:45:51   作者:guoqing2016  
这篇文章主要介绍了解决mybatis case when 报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在mybatis中使用case when进行条件筛选判断时遇到

Failed to process, please exclude the tableName or statementId.

这样的报错信息,报错的信息是语法错误

但是我在mysql的命令行中运行sql语句是没问题的

//我的case when语句
WHERE dept.type = 1
AND 
(
CASE agent.dept_type
WHEN "agent" THEN dept.id=30
END
)
//当agent的dept_type为"agent"时,将添加dept.id = 30的判断

这段sql语句在命令行内运行没问题但是放到mybatis上执行就会报错

//修改后
WHERE dept.type = 1
AND dept.id=
(
CASE agent.dept_type
WHEN "agent" THEN 30
END
)

后来将dept.id放到外面就解决了这个问题

20190718-补充记录 :遇到另一个问题,如果dept这个表是联查来的有可能会没有数据,在dept无数据的时候我们就无法给dept.id赋上啥参数了,并且不可以影响原表数据的查询,我改成了下面这样:

//修改后
WHERE dept.type = 1
AND (dept.id=
(
CASE agent.dept_type
WHEN "agent" THEN 30
ELSE 0
END
) or dept.id is null)

添加dept.id为空的判断即可

(在mysql语句里可以有很多方法解决,但是在mybatis上就会报错 -_-||)

2019-7-30-补充说明:

如果是空字符串不可以使用""要改成单引号''

CASE WHEN *** THEN ***
ELSE "" =>这样也会报错,需要改成=> ELSE''

补充:Mybatis case when test 注意事项

<choose>
      <when test="groupBy!=null and groupBy==1">
        p_id areaId,
      </when>
      <when test="groupBy!=null and groupBy==2">
        c_id areaId,
      </when>
      <when test="groupBy!=null and groupBy==3">
        r_id areaId,
      </when>
    </choose>

test 中 用 == 不能用 = ,否则报错。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 浅谈JVM系列之JIT中的Virtual Call

    浅谈JVM系列之JIT中的Virtual Call

    什么是Virtual Call?Virtual Call在java中的实现是怎么样的?Virtual Call在JIT中有没有优化?所有的答案看完这篇文章就明白了。
    2021-06-06
  • SpringBoot使用MyBatis-Plus解决Invalid bound statement异常

    SpringBoot使用MyBatis-Plus解决Invalid bound statement异常

    这篇文章主要介绍了SpringBoot使用MyBatis-Plus解决Invalid bound statement异常,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 在SpringBoot中使用HATEOAS的方法

    在SpringBoot中使用HATEOAS的方法

    这篇文章主要介绍了在SpringBoot中使用HATEOAS的方法,HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题,下文更多相关介绍,需要的小伙伴可以参考一下
    2022-05-05
  • java.lang.OutOfMemoryError: Java heap space错误的问题解决

    java.lang.OutOfMemoryError: Java heap space错误

    本文主要介绍了java.lang.OutOfMemoryError: Java heap space错误的问题解决,包括内存泄漏、数据过大和JVM堆大小配置不足,提供了解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Java实现json数据处理的常用脚本分享

    Java实现json数据处理的常用脚本分享

    这篇文章主要为大家详细介绍了Java实现json数据处理的常用脚本,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以学习一下
    2023-03-03
  • Java结合redistemplate使用分布式锁案例讲解

    Java结合redistemplate使用分布式锁案例讲解

    在Java中使用RedisTemplate结合Redis来实现分布式锁是一种常见的做法,特别适用于微服务架构或多实例部署的应用程序中,以确保数据的一致性和避免竞态条件,下面给大家分享使用Spring Boot和RedisTemplate实现分布式锁的案例,感兴趣的朋友一起看看吧
    2024-08-08
  • Java全排列算法字典序下的下一个排列讲解

    Java全排列算法字典序下的下一个排列讲解

    今天小编就为大家分享一篇关于Java全排列字典序下的下一个排列,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Java集合中的LinkedHashSet源码解读

    Java集合中的LinkedHashSet源码解读

    这篇文章主要介绍了Java集合中的LinkedHashSet源码解读,在LinkedHashMap中,双向链表的遍历顺序通过构造方法指定,如果没有指定,则使用默认顺序为插入顺序,即accessOrder=false,需要的朋友可以参考下
    2023-12-12
  • springboot打包JAR包瘦身lib和配置文件分离方式

    springboot打包JAR包瘦身lib和配置文件分离方式

    本文介绍了如何通过优化POM.xml配置来减小JAR包大小,提高传输速度,主要步骤包括:指定打包环境和跳过编译单元测试、JAR打包排除配置文件和lib、提供全量包便于开发环境使用、将lib和配置文件单独复制出来
    2024-11-11
  • Javaweb基础入门HTML之table与form

    Javaweb基础入门HTML之table与form

    HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等
    2022-03-03

最新评论