当前位置: 首页 > 编程笔记 >

解决mybatis case when 报错的问题

楮庆
2023-03-14
本文向大家介绍解决mybatis case when 报错的问题,包括了解决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 中 用 == 不能用 = ,否则报错。

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

 类似资料:
  • 本文向大家介绍解决virtualenv -p python3 venv报错的问题,包括了解决virtualenv -p python3 venv报错的问题的使用技巧和注意事项,需要的朋友参考一下 在阿里云服务器上,用virtualenv创建虚拟环境时,报了个错误 看到HTTPError: 404 Client Error: Not Found for url: http://mirrors.ali

  • 本文向大家介绍解决laravel5.4下的group by报错的问题,包括了解决laravel5.4下的group by报错的问题的使用技巧和注意事项,需要的朋友参考一下 使用ORM查询数据显示这个错,这是因为laravel使用了开启了mysql的严格模式所以 如果要关闭的话,我们需要找到config/database.php这个文件,然后将 mysql下的这个改为false;就会关闭。 既然说严

  • 本文向大家介绍解决Python安装cryptography报错问题,包括了解决Python安装cryptography报错问题的使用技巧和注意事项,需要的朋友参考一下 错误一: gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -DHAVE_

  • 本文向大家介绍解决pytorch 数据类型报错的问题,包括了解决pytorch 数据类型报错的问题的使用技巧和注意事项,需要的朋友参考一下 pytorch报错: RuntimeError: Expected object of type Variable[torch.LongTensor] but found type Variable[torch.cuda.ByteTensor] for arg

  • 本文向大家介绍解决cannot be cast to javax.servlet.Filter 报错的问题,包括了解决cannot be cast to javax.servlet.Filter 报错的问题的使用技巧和注意事项,需要的朋友参考一下 cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突 使用maven开发web应

  • 本文向大家介绍ubuntu下 AndroidStudio4.1启动报错问题的解决,包括了ubuntu下 AndroidStudio4.1启动报错问题的解决的使用技巧和注意事项,需要的朋友参考一下 报错信息如下: Internal error. Please refer to https://code.google.com/p/android/issues java.lang.NoSuchMetho