原因
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token
错误通常表示 SQLParser 在解析 SQL 语句时遇到了一个意外的标记。这通常是由以下原因导致的:
- SQL 语法错误:SQLParser 遵循标准的 SQL 语法规则,如果您的 SQL 语句存在语法错误,例如拼写错误、缺少关键字、不正确的标点符号等,都会导致解析错误。请仔细检查您的 SQL 语句并确保它符合正确的语法。
- 不支持的 SQL 特性:SQLParser 可能不支持某些特定的 SQL 语法或功能。例如,某些高级的 SQL 特性、数据库特定的扩展、非标准的 SQL 表达式等可能无法被完全解析。请查阅 SQLParser 的文档以了解其支持的功能和限制。
- 解析器版本不匹配:如果您使用的 SQL 语句是针对不同版本的 SQLParser 编写的,可能会导致解析错误。请确保使用的 SQLParser 版本与您的代码兼容,并且适用于您正在使用的 SQL 语法版本。
解决
- 仔细检查 SQL 语句:检查您的 SQL 语句是否存在拼写错误、缺少关键字、不正确的标点符号等语法错误。确保 SQL 语句符合正确的语法规则。
- 使用支持的 SQL 特性:SQLParser 可能不支持某些高级的 SQL 特性或数据库特定的扩展。请查阅 SQLParser 的文档以了解其所支持的功能和限制,并相应地调整您的 SQL 语句。
- 更新 SQLParser 版本:如果您使用的 SQLParser 版本较旧或与您的 SQL 语句不兼容,尝试更新到最新的版本。新版本通常会修复一些已知的问题和错误。
- 查阅解析器错误消息:解析器错误消息可能会提供更详细的信息,帮助您定位到具体的错误位置。查看错误消息并根据提示来调整您的 SQL 语句。
- 提交 Issue 或寻求帮助:如果您经过仔细排查后仍无法解决问题,可以考虑访问 SQLParser 的官方网站或仓库,提交 Issue 并寻求帮助。开发者社区可能能够提供具体的解决方案或指导。
我的问题:
Mybatis-plus官网说是框架中使用到了多租户功能,Mybatis-plus 会进行数据权限的过滤,但是有些接口,其实并不想被多租户过滤,所以要对该条sql,进行租户放行。关于这块,Mybatis-plus官网给出了
***SqlParserFilter***
sql 解析过滤器说明,当然对这部分感兴趣的小伙伴们,可以去Mybatis-plus官网查看相关源码,我这里就不在具体说明了。
参考Mybatis-plus官网,在Mapper层接口方法上 加入注解
@SqlParser(filter=true)
注意:说明:如果Mybatis-plus版本是3.1.1至3.4.0以下版本可以直接 添加此注解 即可,3.1.1以下版本需要添加如下配置
# 开启 SQL 解析缓存注解生效
mybatis-plus:
global-config:
sql-parser-cache: true
版权归原作者 Swittee丶Henry 所有, 如有侵权,请联系我们删除。