Failed to process, please exclude the tableName or statementId. Error SQL

博客内容讲述了在使用MybatisPlus时遇到的一个错误,错误信息指出查询语句WHERE(link_equipment_id IN())中IN()括号内没有设置任何查询条件,这是不正确的SQL用法。解决方案是确保IN()内包含至少一个查询条件,即使为空字符串。建议在业务代码中进行判断,避免执行无效SQL。

错误信息:

nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId. Error SQL: SELECT id,plc_no,plc_name,link_equipment_id,equipment_type,device_type,remark,plc_type,ip_address,ip_port,plc_state,bill_process_id,create_id,create_user,create_time,update_id,update_user,update_time,del_flag FROM dcs_plc_config WHERE (link_equipment_id IN ()) ### The error may exist in com/biz/plc/mapper/PlcConfigMapper.java (best guess) ### The error may involve com.biz.plc.mapper.PlcConfigMapper.selectList ### The error occurred while executing a query ### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId. Error SQL: SELECT id,plc_no,plc_name,link_equipment_id,equipment_type,device_type,remark,plc_type,ip_address,ip_port,plc_state,bill_process_id,create_id,create_user,create_time,update_id,update_user,update_time,del_flag FROM dcs_plc_config WHERE (link_equipment_id IN ()) 

 

原因: 

WHERE (link_equipment_id IN ()) 这个地方错了,IN() 括号里什么都没有,就是没有设置任何查询条件,这种方式是不对的,属于sql错误, .

IN()括号里必须设置查询条件,哪怕是空字符串也行,如:WHERE (link_equipment_id IN ('')),而他的查询条件就是空字符串。

如果真的没有查询参数,就不要走此SQL语句,可在业务里做下判断。

解决该错误的方法有以下几种: - **检查 SQL 语句语法**:若错误是因 SQL 语句中的表名或语句标识未被正确解析,需检查 SQL 语句是否存在语法错误,如缺少逻辑操作符等。例如,若 SQL 语句 `select c.id from code_scanning_attribution c left join user_relation u on c.user_info_id = u.user_info_id where c.parent = ? c.deleted = 0 and c.enabled = 1 and u.author_user_id is null` 报错,可添加缺失的 `and` 操作符,修改为 `select c.id from code_scanning_attribution c left join user_relation u on c.user_info_id = u.user_info_id where c.parent = ? AND c.deleted = 0 and c.enabled = 1 and u.author_user_id is null` [^2]。 - **排除表名**:当使用自定义 SQL,含有特殊函数或复杂语法,不被 JSqlParser(SQL 解析器)支持时,可在配置 MyBatis Plus 的 `TenantHandler` 时,在 `doTableFilter` 方法中将该表过滤掉,即不处理这个表的租户 id 字段 [^3]。 - **排除该语句**:在自定义 SQL 的接口上标注 `@SqlParser(filter = true)`。示例如下: ```java @SqlParser(filter = true) @Select("此处应有很酷炫的SQL") void selectDemo(); ``` 官方对于此注解的解释是:租户注解,支持 method 上以及 mapper 接口上,默认值为 false;true 表示过滤 SQL 解析,即不会进入 `ISqlParser` 解析链;false 会进解析链并追加例如 `tenant_id` 等条件 [^3]。 - **在 Mapper 接口上添加注解**:在 Mapper 接口上添加 `@SqlParser(filter = true)`。示例如下: ```java @SqlParser(filter = true) IPage<TaskVO> page(Page page, @Param("query") TaskDto taskDto); ``` [^4]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丢了尾巴的猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值