当前使用版本 3.5.6 当前环境信息 jdk-21 & sqlserver 2016

描述bug现象 使用租户插件时,xml sql 中 select 或 where 后字段包含 “[]” ,会导致com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle方法报错。

例如: select value from sa_token_storage where [key] =#{key} 提供问题复现步骤 1、mapper xml MyBatis-Plus 使用租户插件时,字段包含[]导致sql解析报错

2、启用租户插件 TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(); TenantLineHandler myTenantLineHandler = new MyTenantLineHandler(); tenantLineInnerInterceptor.setTenantLineHandler(myTenantLineHandler); interceptor.addInnerInterceptor(tenantLineInnerInterceptor);

提供完整堆栈日志(可选)

Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select [value]

    from sa_token_storage
    where [key] =?

Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select [value]

    from sa_token_storage
    where [key] =?
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:156)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
... 67 common frames omitted

Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select [value] from sa_token_storage where [key] =? at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:39) at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:51) at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.beforeQuery(TenantLineInnerInterceptor.java:70) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:78) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) at jdk.proxy2/jdk.proxy2.$Proxy199.query(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) ... 73 common frames omitted Caused by: java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "select" at line 1, column 1.

Was expecting one of:

"WITH"

at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:343)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:123)
at com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal.lambda$static$1(JsqlParserGlobal.java:58)
at com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal.parse(JsqlParserGlobal.java:68)
at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:48)
... 78 common frames omitted

Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "select" at line 1, column 1.

Comment From: miemieYaho

net.sf.jsqlparser.parser.ParseException

Comment From: huayanYu

找jsqlparser