项目场景:
在使用mybatis-plus分页和pagehelper分页时遇到的问题
mybatis-plus-boot-starter版本为3.4.1
pagehelper版本为5.3.2
问题描述
在使用IPage分页时突然就出现了如下报错,因为之前在使用的时候一直都是没问题的怎么就突然报错了,真的是让人百思不得其解,也没想太多直接上了百度,发现有的说mybatis-plus-boot-starter版本问题升下版本就ok了,也有的说... 众说纷纭, 于是就有了以下的排查过程。
sql报错内容
原因分析:
随着好奇的心,一路debug开心的走进了源码
进入到MybatisPlusInterceptor拦截类
找到分页前执行的count的代码逻辑
具体的问题具体分析
以上是debug的大概过程,看到这里大家应该知道了其实在底层逻辑中就已经有问题了,不知道大家还记得我上面说之前用一直是好好的,为什么突然就不行了。
原因是我在整理maven时,把mybatis-plus-boot-starter中jsqlparser排除了,并且加上了mybatis-plus的代码生成mybatis-plus-generator,导致jsqlparser版本不一致的问题。
jsqlparser4.5版本根据上面dubug过程是有问题的,jsqlparser3.2版本会有什么不一样吗,好奇的心,激动的手,一路小走进源码,其他的过程不看只看核心部分。
解决方案:
- 第一种方式:可以把pagehelper中的jsqlparse包r排除掉,使用mybatis-plus-boot-starter中的jsqlparser包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
- 第二种方式:可以把pagehelper和mybatis-plus-boot-starter中的jsqlparser包全部排除掉,如果有用到mybatis-plus-generator代码生成也需要将其中的jsqlparser排除掉,再重新加上jsqlparser的maven坐标,重新引入jsqlparser版本使用需要和mybatis-plus-boot-starter中引用的一致
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus-generator.version}</version>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
- 第三种方式:至于升mybatis-plus版本的话如果是商业项目其实是存在风险问题,个人项目的话就随意
- 不建议mybatis-plus分页和pagehelper分页一起混用,无奈之举的话可以考虑第一种和第二种方式
到这里就结束啦,祝大家生活愉快!