Error creating bean with name 'mybatisPlusInterceptor' defined in class path resource [com/dji/sample/component/mybatis/MybatisPlusConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor]: Factory method 'mybatisPlusInterceptor' threw exception; nested exception is java.lang.NoClassDefFoundError: net/sf/jsqlparser/statement/select/SelectExpressionItem at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.27.jar:5.3.27]
时间: 2025-07-13 22:34:01 浏览: 8
<think>好的,我现在需要解决用户在Spring Boot项目中使用MyBatis-Plus时遇到的NoClassDefFoundError问题。错误信息是关于net.sf.jsqlparser.statement.select.SelectExpressionItem的类找不到。根据用户提供的引用信息,特别是引用[4],这通常是由于JSqlParser版本不兼容引起的。
首先,我应该回忆一下MyBatis-Plus和JSqlParser之间的依赖关系。MyBatis-Plus在分页插件等拦截器中会使用JSqlParser来解析SQL语句,因此版本兼容性非常重要。用户可能引入的MyBatis-Plus版本与JSqlParser的版本不匹配,导致运行时找不到特定的类。
接下来,我需要检查用户的项目依赖配置。用户可能没有显式声明JSqlParser的依赖,或者声明了错误的版本。例如,如果MyBatis-Plus 3.x版本需要JSqlParser 4.7,而用户的项目中可能使用了旧版本或者新版本不兼容的JSqlParser。这时候需要查看MyBatis-Plus官方文档,确认兼容的JSqlParser版本,并在pom.xml或build.gradle中显式添加正确的版本。
另外,可能存在依赖冲突的情况。例如,其他库可能引入了不同版本的JSqlParser,导致Maven或Gradle选择了错误的版本。这时候可以使用依赖树分析工具(如mvn dependency:tree)来查看依赖关系,排除掉冲突的版本。
根据引用[4]中的建议,用户应该检查并确保JSqlParser的版本与MyBatis-Plus兼容。例如,添加正确的依赖项,如:
```xml
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.7</version>
</dependency>
```
同时,确认MyBatis-Plus的版本是否支持这个JSqlParser版本。例如,MyBatis-Plus 3.4.0之后的版本可能需要JSqlParser 4.2及以上。如果用户使用的是较旧的MyBatis-Plus版本,可能需要升级MyBatis-Plus或降级JSqlParser。
另外,用户可能没有正确配置拦截器Bean。需要检查是否在配置类中正确创建了MybatisPlusInterceptor,并添加了分页插件等。例如:
```java
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
```
如果配置正确,但问题仍然存在,可能需要清理Maven/Gradle的本地仓库缓存,重新下载依赖。有时候旧的缓存文件可能导致依赖问题。
总结解决步骤应该是:检查依赖版本,显式添加正确版本的JSqlParser,排除冲突依赖,确保MyBatis-Interceptor配置正确,清理并重新构建项目。如果用户按照这些步骤操作,应该能解决NoClassDefFoundError的问题。</think>### 解决方案:MyBatis-Plus拦截器因JSqlParser版本导致的`NoClassDefFoundError`
#### 问题原因
`NoClassDefFoundError: net.sf.jsqlparser.statement.select.SelectExpressionItem`通常由以下原因引起:
1. **JSqlParser依赖缺失或版本不兼容**:MyBatis-Plus的分页插件依赖JSqlParser解析SQL,若版本不匹配会触发类加载失败[^4]。
2. **依赖冲突**:项目中其他库可能引入旧版JSqlParser,导致Maven/Gradle选择了错误的版本。
---
#### 解决步骤
##### 1. 确认JSqlParser版本兼容性
- **MyBatis-Plus 3.4.0+** 需要 **JSqlParser 4.2+**,推荐使用 **4.7**。
- 在`pom.xml`中显式声明JSqlParser依赖:
```xml
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.7</version>
</dependency>
```
##### 2. 排除冲突依赖
- 检查依赖树是否存在旧版本JSqlParser:
```bash
mvn dependency:tree | grep jsqlparser
```
- 若存在冲突,排除其他库引入的旧版本:
```xml
<dependency>
<groupId>其他依赖的组ID</groupId>
<artifactId>其他依赖的包名</artifactId>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
```
##### 3. 验证拦截器配置
确保拦截器(如分页插件)已正确添加到Spring容器:
```java
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
```
##### 4. 清理并重新构建项目
- 清理Maven本地仓库缓存(路径:`~/.m2/repository/com/github/jsqlparser`)。
- 重新构建项目:
```bash
mvn clean install
```
---
#### 验证结果
- 启动项目,检查是否仍报错。若无错误,说明依赖问题已解决。
- 若问题持续,检查IDE是否未正确加载依赖(尝试重启IDE或更新Maven/Gradle索引)。
---
阅读全文
相关推荐



















