一般来说出现这个问题Invalid bean definition with name ‘xxxMapper‘ defined in flle主要是下面几个原因:
- Mapper 接口未被正确扫描
- Lombok 未正确生成代码
- JDK 版本不匹配
- MyBatis 版本与 Spring Boot 不兼容
现在给出对应的解决方法,希望能帮到您
1. 确认 Mapper 接口扫描配置
(1)在mapper包下所有的类都分别添加@mapper注解(不建议)
(2)编写mybayisPlusConfig配置类并且添加扫描包
@Configuration
@MapperScan("com.atguigu.lease.web.*.mapper")
public class MybatisPlusConfiguration {}
(2)在启动类(XXXXApplication.java
)中添加 @MapperScan
注解:
@SpringBootApplication
@MapperScan("com.xxx.xxx.*.mapper") // 确保与要扫描的mapper包路径一致
public class AdminWebApplication {
public static void main(String[] args) {
SpringApplication.run(AdminWebApplication.class, args);
}
}
2. 验证 Lombok 配置
- IDE 设置:
- IntelliJ:
File > Settings > Build > Compiler > Annotation Processors
→ 勾选启用 - Eclipse:安装 Lombok 插件后重启
- IntelliJ:
- 检查编译后的类:
在target/classes
目录下确认XXXMapper.class
是否包含预期的注解和方法。
如果检查发现target/classes
目录下没有生成对应的注解和方法,重新引入lombok的依赖,尽量引用较新的版本
3. 检查 JDK 版本
Spring Boot 3.x 至少需要 JDK 17+,验证环境变量:
java -version # 输出应包含 "17" 或更高版本号
如果不知道自己的jdk与哪个spring boot版本匹配,可以参考这位大佬文章,非常详细:
Springboot各版本与Java JDK的对应关系及JDK商用版本_springboot版本和jdk版本-优快云博客
4. 检查 MyBatis 依赖版本
在 pom.xml
中验证依赖(Spring Boot 3.x 需使用 MyBatis Starter 3.x):
如果不知道自己的springboot与mybatis的版本分别怎么匹配,可以参考这位大佬的博客,对版本问题非常详细:
Spring Boot、MyBatis、MyBatis-Plus 依赖版本对应关系总结_mybatisplus与springboot版本对应关系-优快云博客
建议按照下面的方式引入(根据自己的springboot和mybatis进行修改):
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>