解决mybatis case when 报错的问题
时间:2021-08-01 08:56:01|栏目:JAVA代码|点击: 次
在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 中 用 == 不能用 = ,否则报错。
上一篇:java日期格式化SimpleDateFormat的使用详解
栏 目:JAVA代码
本文标题:解决mybatis case when 报错的问题
本文地址:http://www.codeinn.net/misctech/163220.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




