SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX
写在前面
最近开发过程中,在where条件中使用IF函数,在MySQL数据库中,使用Navicat运行没有问题,但是运行项目的时候,死活过不去,一直报错,后来一番折腾找到了解决方案,所以,以防后续再出现类似问题,仅做记录!
说明:项目为SpringBoot项目,持久化层框架使用的是Mybatis-plus(版本为3.0.7)
1.问题复现
1.1 SQL语句执行结果

1.2 Mapper层对应接口

1.3 Mabyties对应xml

1.4 报错信息

2. 问题原因
针对这个问题,在网上查了相关文档,Mybatis-plus官网说是框架中使用到了多租户功能,Mybatis-plus 会 进行数据权限的过滤,但是有些接口,其实并不想被多租户过滤,所以要对该条sql,进行租户放行。关于这块Mybatis-plus官网说明了 SqlParserFilter sql 解析过滤器,当然对这部分感兴趣的小伙伴们,可以去Mybatis-plus官网查看相关源码,我这里就不在具体说明了。
说明:多租户:多个用户间使用同一套程序,但每个用户之间实现数据隔离
3.问题解决
参考Mybatis-plus官网,在Mapper层接口方法上 加入注解
@SqlParser(filter=true)
官网截图如下

加完注解之后的Mapper层接口方法如下:
@SqlParser(filter = true)
List<EmpWhiteList> getAdminList(@Param("empId") String empId, @Param("timeDate") String timeDate);
加完此注解之后,由于项目的Mybatis-plus版本为3.0.7,所以这里还要再在application.yml文件中添加下列配置才能生效
说明:如果Mybatis-plus版本是3.1.1至3.4.0以下版本可以直接 添加此注解 即可,3.1.1以下版本需要添加如下配置:
# 开启 SQL 解析缓存注解生效
mybatis-plus:
global-config:
sql-parser-cache: true
mybatis-plus3.4.0及以上版本注意:
@SqlParser(filter = true) 在mybatis-plus最新版本3.4.0及以上版本中被标记为已过时,具体替代方案,官网已给出
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface InterceptorIgnore {
...
}
关于此注解官网给出如下使用方法:

鉴于此,如果项目引入的MybatisPlus版本为3.4.0及以上,则多租户屏蔽某个特定mapper接口的方法,则使用如下解决方案:
@InterceptorIgnore(tenantLine = "true")
List<EmpWhiteList> getAdminList(@Param("empId") String empId, @Param("timeDate") String timeDate);
SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX的更多相关文章
- 在sql中使用函数,遇到net.sf.jsqlparser.parser.ParseException异常
异常详情如下 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered " "->" &quo ...
- Encountered unexpected token: "ur" <K_ISOLATION>
在用mybatis-plus的过程中 , 报如下错误 : Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpec ...
- 【异常】Maxwell异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after : ""
1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at ...
- 异常-Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after :
1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at ...
- 关于org.apache.lucene.queryParser.ParseException: Encountered "" 解决方法
现象: org.apache.lucene.queryParser.ParseException: Encountered "<EOF>" at line 1, col ...
- SpringBoot项目搭建 + Jwt登录
临时接了一个小项目,有需要搭一个小项目,简单记录一下项目搭建过程以及整合登录功能. 1.首先拿到的是一个码云地址,里面是一个空的文件夹,只有一个 2. 拿到HTTPS码云项目地址链接,在IDEA中cl ...
- org.apache.lucene.queryParser.ParseException: Encountered "<EOF>" at line 1, column 0.
如果出现了下列错误,那是因为用错了函数.把queryParser.Query改称queryParser.parse就通过了 org.apache.lucene.queryParser.ParseExc ...
- 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
前言:本项目基于maven构建 spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行: spring-boot项目需要部署在外部容器中的时候,spring ...
- SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、属性配置、多环境配置
1 InteliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到官 ...
- idea快速搭建springboot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置',实现零配置. 那么,如何在idea中创建一个spri ...
随机推荐
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(14)-Charles过滤网络请求
1.简介 在日常工作测试中,经常要抓包看请求的request,response是不是传的对,返回的字段值对不对,众多的请求中看得眼花缭乱,如何找到自己想要的请求,那么我们就需要过滤请求.Charles ...
- 迁移学习(COAL)《Generalized Domain Adaptation with Covariate and Label Shift CO-ALignment》
论文信息 论文标题:Generalized Domain Adaptation with Covariate and Label Shift CO-ALignment论文作者:Shuhan Tan, ...
- 笔记:C++学习之旅---泛型算法
标准库并未给每个容器定义成员函数来实现这些操作,而是定义了一组泛型算法(generic algorithm):称他们为"算法",是因为他们实现了一些经典算法的公共接口 ...
- 使用Jmeter进行CPU、内存等监控
一.需要的准备 1.jp@gc - PerfMon Metrics Collector插件(安装方法就不过多介绍啦!) 2.ServerAgent服务器(下载:https://github.com/u ...
- Spring 之bean的生命周期
文章目录 IOC Bean的生命周期 运行结果 实例演示 实体类 实例化前后置代码 初始化的前后置代码 application.xml 总结 今天我们来聊一下Spring Bean的生命周期,这是一个 ...
- weex 开发APP 多行文本溢出处理
weex中文字溢出不能使用常规的overflow:hidden 如: .text { overflow: hidden; text-overflow: ellipsis; white-space: n ...
- 用token辅助 密码爆破
第一步:打开皮卡丘,点击暴力破解,token防爆破,输入正确用户名,错误密码 BP拦截请求,点击皮卡丘Login,然后拦截后, 发送给Intruder 第二步: 爆破方式选择音叉方式, & ...
- 2023.5.25 Linux系统Bash初识
1.Linux系统终端概述2.Linux系统Bash管理2.1.Bash特性:命令补全2.2.Bash特性:命令快捷键2.3.Bash特性:命令别名2.4.Bash特性:命令流程2.5.Bash特性: ...
- NIST SP 800-37 Risk Management Framework for Information Systems and Organizations A System Life Cycle Approach for Security and Privacy
NIST SP 800-37 Risk Management Framework for Information Systems and Organizations A System Life Cyc ...
- 一文教会你用Apache SeaTunnel Zeta离线把数据从MySQL同步到StarRocks
在上一篇文章中,我们介绍了如何下载安装部署SeaTunnel Zeta服务(3分钟部署SeaTunnel Zeta单节点Standalone模式环境),接下来我们介绍一下SeaTunnel支持的第一个 ...