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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于Hmily实现TCC分布式事务解决方案[通俗易懂]

    基于Hmily实现TCC分布式事务解决方案[通俗易懂]前言在上一篇中,我们大致讲述了TCC事务的来源以及执行原理,并使用seata提供的解决方案完成了一个简单案例的整合与代码演示,本篇我们将采用Hmily的方式实现TCC事务的解决方案与演示业务描述有一个银行转账的场景,用户A需要向用户B转1块钱,如果大家使用的是同一个数据库,就不存在分布式事务的问题,现实中大家都各自使用自己的库,就产生了分布式事务可以理解为,两个账户分别在不同的银行(用户…

    2022年5月21日
    37
  • Linux top 命令详解

    Linux top 命令详解查看多核CPU命令 mpstat-PALL 和  sar-PALL  说明:sar-PALL>aaa.txt  重定向输出内容到文件aaa.txt top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。本文

    2022年9月24日
    0
  • 几种页面跳转方法_HTML页面跳转的方法

    几种页面跳转方法_HTML页面跳转的方法页面跳转方式1——herf在一些html的文档中,用herf实现页面跳转的比较常见,也很好用。页面跳转方式2——利用表单action页面跳转方式3——response.sendRedirect(

    2022年8月5日
    22
  • pytorch lstm时间序列预测问题踩坑「建议收藏」

    这里写目录标题1.做时间序列问题2.问题1.数据集自己做,为多个输入对应多个或一个输出2.损失函数注意:不能用交叉熵nn.CrossEntropyLoss()3.准确率1.做时间序列问题2.问题1.数据集自己做,为多个输入对应多个或一个输出2.损失函数注意:不能用交叉熵nn.CrossEntropyLoss()nn.CrossEntropyLoss()要求target目标值即真实值是标签,是torch.int64类型数据,即整数,不允许小数,如果输入小数会强行取整,应该用nn.MSELo

    2022年4月16日
    42
  • Java基础语法(五)运算符的那些事

    Java基础语法(五)运算符的那些事

    2021年4月21日
    184
  • 腾讯与唯品会笔试面试经历[通俗易懂]

    腾讯与唯品会笔试面试经历

    2022年2月2日
    39

发表回复

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

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