net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: “table“ “TABLE“

现有特殊需求,获取 mysql 创建表的ddl,普通使用可以,但是通过项目中访问不行,得知 mybatis-plus 使用了 jsqlparser,但是不知为什么出现了这个异常。

Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: show create table `data_announcement`
    at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:39)
    at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:52)
    at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.beforeQuery(TenantLineInnerInterceptor.java:65)
    at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:78)
    at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
    at com.sun.proxy.$Proxy373.query(Unknown Source)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
    ... 134 more
Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "table" "TABLE"
    at line 1, column 13.

Was expecting one of:

    ";"
    <EOF>

    at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:31234)
    at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:31067)
    at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:163)
    at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:188)
    at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:63)
    at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:38)
    at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:49)
    ... 139 more

网上搜到了如下链接

https://www.cnblogs.com/cndarren/p/13218290.html

得知使用了多租户功能导致数据访问问题,屏蔽此方法即可。

需要看引用的 jar 版本,项目中引用的是 3.5.1,官网文档修改了位置,文档如下

https://baomidou.com/pages/2976a3/#%E6%8B%A6%E6%88%AA%E5%BF%BD%E7%95%A5%E6%B3%A8%E8%A7%A3-interceptorignore

mapper 方法声明

@InterceptorIgnore(tenantLine = "true")
Map getDdlTable(@Param(value = "catalog") String catalog, @Param(value = "tableName") String tableName);

xml 声明

<select id="getDdlTable" resultType="java.util.Map">
    show create table `${tableName}`
</select>

返回的数据有一行两列,需要指定返回类型为 map,不然的话返回数据有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值