SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX

SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX

写在前面

  最近开发过程中,在where条件中使用IF函数,在MySQL数据库中,使用Navicat运行没有问题,但是运行项目的时候,死活过不去,一直报错,后来一番折腾找到了解决方案,所以,以防后续再出现类似问题,仅做记录!

说明:项目为SpringBoot项目,持久化层框架使用的是Mybatis-plus(版本为3.0.7)

1、问题复现

1.1 SQL语句执行结果

<span>SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX</span>

1.2 Mapper层对应的接口

<span>SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX</span>

1.3 Mybatis对应的xml文件代码

<span>SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX</span>

 1.4 报错信息

<span>SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX</span>

 2、问题原因

  针对这个问题,在网上查了相关文档,Mybatis-plus官网说是框架中使用到了多租户功能,Mybatis-plus 会 进行数据权限的过滤,但是有些接口,其实并不想被多租户过滤,所以要对该条sql,进行租户放行。关于这块Mybatis-plus官网说明了 SqlParserFilter  sql 解析过滤器,当然对这部分感兴趣的小伙伴们,可以去Mybatis-plus官网查看相关源码,我这里就不在具体说明了。

说明:多租户:多个用户间使用同一套程序,但每个用户之间实现数据隔离

3、问题解决

  参考Mybatis-plus官网,在Mapper层接口方法上 加入注解  

@SqlParser(filter=true)

官网截图如下:

<span>SpringBoot项目:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXX</span>

加完注解之后的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.1.1以下版本需要添加如下配置:

# 开启 SQL 解析缓存注解生效
mybatis-plus: global-config: sql-parser-cache: true

参考文档:

1、https://blog.csdn.net/drose29/article/details/103893228

2、https://blog.csdn.net/qq_39313596/article/details/100943090

3、https://mp.baomidou.com/guide/tenant.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2243.html原文链接:https://javaforall.net

(0)
上一篇 2020年11月9日 上午10:14
下一篇 2020年11月9日 上午10:14


相关推荐

  • ios-tableView的touchesBegan事件和didSelectRowAtIndexPath方法

    ios-tableView的touchesBegan事件和didSelectRowAtIndexPath方法今天做了个测试,看看tableView如果实现了touchesBegan方法和实现了didSelectRowAtIndexPath点击的时候会去实现哪一个?答案是touchesBegan。先附上测试的函数-(void)touchesBegan:(NSSet*)toucheswithEvent:(UIEvent*)event{NSLog(@”——“);}

    2022年7月25日
    13
  • 虚拟化漏洞3种解决方案_怎么实现漏洞复现的

    虚拟化漏洞3种解决方案_怎么实现漏洞复现的利用虚拟机复现漏洞“永恒之蓝”攻击:kaliLinux2020.3靶机:WindowsServer2008R2x64下面详细讲述测试的过程。————“永恒之蓝”简介利用Windows系统的SMB漏洞可以获取系统最高权限。于2017年在全球的范围内大面积爆发,不法分子利用这个漏洞制作了勒索病毒,锁定被攻击的设备,并要求支付高额赎金。“永恒之蓝”的原理主要是扫描所有开放445文件共享端口的Windows机器。这里进行测试要用到一个工具MSF,能快速

    2022年10月16日
    4
  • 关于裴蜀定理的一些证明

    关于裴蜀定理的一些证明裴蜀定理 对任何 a b Za b inZ 和它们的最大公约数 dd 关于未知数 xx 和 yy 的线性不定方程 称为裴蜀等式 ax by cax by c 有整数解 x y x y 当且仅当 d cd midc 可知有无穷多解 特别地 一定存在整数 x yx y 使 ax by dax by d 成立 推论 a ba b 互质的充要条件是存在整数 x yx y 使 ax by 1ax by 1 对于 a b

    2026年3月18日
    1
  • java官网下载「建议收藏」

    java官网下载「建议收藏」安装版http://javadl.oracle.com/webapps/download/AutoDL?BundleId=234471_96a7b8442fe848ef90c96a2fad6ed6d1win64http://javadl.oracle.com/webapps/download/AutoDL?BundleId=234474_96a7b8442fe848ef90c96a2f…

    2022年7月7日
    36
  • input type=date时,时间数据回填,报错The specified value “2019-0404-18” does not conform to the required format…

    input type=date时,时间数据回填,报错The specified value “2019-0404-18” does not conform to the required format…

    2021年11月8日
    81
  • ucosiii应用举例_SATA III接口

    ucosiii应用举例_SATA III接口任务的创建和删除实验uCOSIII是多任务系统,那么肯定要创建任务,创建任务就是将任务控制块、任务堆栈、任务代码等联系在一起,并且初始化任务控制块的相应字段。在UCOSIII中我们通过函数OSTaskCreate();来创建任务,OSTaskCreate();函数原型如下(在os_task.c中有定义)。电泳OSTaskCreate();创建一个任务之后,刚创建的任务就会进入就绪状态,注意!

    2025年9月21日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号