当前使用版本(必填,否则不予处理)

3.1.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

原因:在mapper.xml中写"SELECT 1 > 0"这样select后带表达式的sql,并且开启多租户时会出现这个问题。 并且经过debug,我发现是因为你们引用的jsqlparser这个框架引起的。

暂时解决方案:在mapper接口添加了@SqlParser(filter = true)之后,就不经过jsqlparser进行解析,这个sql走mybatis的流程就没问题。

重现步骤(如果有就写完整)

1、在mapper.xml中用"SELECT 1 > 0"可以复现

2、使用多租户时,解析sql会使用jsqlparser-1.2.jar。

debug执行这到个方法时抛出下面的异常:net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: ">" ">" net.sf.jsqlparser.parser.CCJSqlParserUtil#parseStatements

3、我单独执行这个方法,也的确还是抛出这个异常

测试下面的代码: jsqlparser-1.2.jar及其最新版jsqlparser-3.1.jar都有这个问题。 测试代码如下:

public static void main(String[] args) throws JSQLParserException { CCJSqlParserUtil.parseStatements("SELECT 1 > 0 "); } 依赖如下(1.2和3.1都可以试试): <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>1.2</version> </dependency>

报错信息

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: ">" ">"

Comment From: miemieYaho

去找 jsqlparser

Comment From: ye17186

有规避方案吗?