Mybatis plus引入分页报错java.lang.NoSuchMethodError

loserwang
  • 40

在原来的应用中引入mybatis-plus,一切都按照官方教程。

<!-- mybatis plus引入插件 -->
    <bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
        <property name="interceptors">
            <list>
                <!-- 分页插件-->
                <ref bean="paginationInnerInterceptor"/>
            </list>
        </property>
    </bean>

    <!-- mybatis引入分页插件 -->
    <bean id="paginationInnerInterceptor"
          class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor">
        <constructor-arg name="dbType" value="MYSQL"/>
    </bean>

代码可以通过编译,但是在部署的时候会报错:java.lang.NoSuchMethodError: net.sf.jsqlparser.statement.select.SelectExpressionItem.withAlias
image.png

以我个人经验来看,出现java.lang.NoSuchMethodError时有两个可能:

  1. 存在依赖冲突
  2. 引入的依赖版本对不上

但是,我用插件分析了pom.xml, 发现com.github.sqlparser不仅没有冲突,还是mybatis-plus包自带的版本:
image.png

我实在想不到这个java.lang.NoSuchMethodError是怎么出现的。希望有大佬指点一下思路。

回复
阅读 867
3 个回答
✓ 已被采纳

写了个demo试了下,下边是我的依赖,好像和你的 mybatis-plus以及jsqlparser版本都是一样的。
image.png

而且在这个依赖版本下,我这边测试是成功了。

根据报错,你这个问题,因该是调用withAlias时,没有这个方法,所以感觉只能是jsqlparser包的问题。
image.png

然后我把jsqlparser的包版本从4.2逐一降低测试,到4.0为止都没有问题,但是降低到3.2的时候也出现了你所说的问题。所以你的jsqlparser版本应该就是3.2或者更低的。

  <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.github.jsqlparser</groupId>
                <artifactId>jsqlparser</artifactId>
                <version>3.2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

image.png

mp对count sql做了优化,就是使用的jsqlparser去做sql解析再构造的,你这明显就是jsqlparser和mp的版本不匹配了,去官网看看人家推荐的版本关系,或者看springboot引入的相关依赖,你直接把人家的版本扣下来就行了

一头老母猪
  • 3
新手上路,请多包涵

是版本依赖问题,我遇到过,

宣传栏