使用mybatis-plus的分页插件在开启join优化后,当出现cs、ur、uu等 隔离级别的关键字sql优化时会出现大量警告

版本

		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>

当前最新版本3.5.3.1
查看依赖可已发现该版本下的jsqlparser为4.4
在这里插入图片描述

警告原文

2023-02-24 15:54:37.446 WARN ,,,] [http-nio-9123-exec-1] com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor:360   :optimize this sql to a count sql has exception, sql:"select *
from ees_user_info eui
         left join ees_empl_info eee on eui.id = eee.user_id
         left join user_role ur on eui.id = ur.user_id", exception:
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "," ","
    at line 1, column 50.

Was expecting one of:

    ")"
    "CONNECT"
    "EMIT"
    "EXCEPT"
    "GROUP"
    "HAVING"
    "INTERSECT"
    "INTO"
    "MINUS"
    "START"
    "UNION"
    "WINDOW"

问题排查

经排查发现该警告来自于jsqlparser包下的 CCJSqlParserUtil.parse(sql)方法报的ParseException。
于是测试代码如下

//此处jsqlparser包的版本为4.4
public static void main(String[] args) {
        String sql = "select *\n" +
                "from ees_user_info eui\n" +
                "         left join ees_empl_info eee on eui.id = eee.user_id\n" +
                "         left join user_role ur on eui.id = ur.user_id";

        try {
            Select select = (Select) CCJSqlParserUtil.parse(sql);
        } catch (JSQLParserException e) {
            e.printStackTrace();
        }
    }

解决

发现jsqlparser最新的包为4.6于是修改pom

		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-version}</version>
            <exclusions>
                <!--        3.5.2版本mp中4.4版本的jsqlparser在做分页拦截器的join优化时解析mysql多个左连接的sql时会报错已排除该包,采用4.6-->
                <exclusion>
                    <groupId>com.github.jsqlparser</groupId>
                    <artifactId>jsqlparser</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>4.6</version>
        </dependency>

一开始以为是多层left join的问题,后续发现是因为jsqlparser4.4不支持 cs、ur、uu等 隔离级别的关键字导致的报错!
关联issue建议升级mp的jsqlparser版本,否则多个left join sql 在分页插件join优化时会一直报警告

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值