报错详情
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等条件。
 
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
            
                                            
                                            
                                            
                                            
                                            
发表评论