本文主要是介绍解决MyBatisPlus报错:Failed to process, please exclude the tableName or statementId,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
报错详情:
Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId. Error SQL: xxxxxxxx
报错原因:
使用了自定义SQL,可能含有特殊的函数或者复杂的语法,因而不被JSqlParser
(SQL解析器)所支持(无法添加租户id
之类的字段),以致抛出了JSQLParserException
。
该异常又被MyBatisPlus捕获,并封装成MybatisPlusException
后抛出。
源码:com.baomidou.mybatisplus.core.parser.AbstractJsqlParser
解决方法:
Failed to process, please exclude the tableName or statementId
翻译过来就是:处理失败,请将表名或者语句id进行排除。
P.S. 提示的很具体,但读起来容易懵,因为不熟悉的人并不知道是租户id出了问题
方法一:排除表名
在配置MyBatisPlus的TenantHandler
时在doTableFilter
方法中将该表过滤掉(也就是不处理这个表的租户id
字段)。
方法二:排除该语句
在自定义SQL的接口上标注 @SqlParser(filter = true)
:
@SqlParser(filter = true)@Select("此处应有很酷炫的SQL")void selectDemo();
官方对于此注解的解释是:
租户注解,支持method上以及mapper接口上,默认值为false;
true 表示过滤SQL解析,即不会进入ISqlParser解析链;
false 会进解析链并追加例如tenant_id等条件。
这篇关于解决MyBatisPlus报错:Failed to process, please exclude the tableName or statementId的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!