当前使用版本(必填,否则不予处理)
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
有规避方案吗?