【已解决】SpringBoot3项目整合Mybatis-plus启动项目报错:Invalid bean definition with name ‘xxxMapper‘ defined in flle_invalid bean definition with name \'ordermapper\' de
文章标题
- 问题描述
- 原因分析
- 解决方案
- 参考资料
问题描述
最近,在SpringBoot v3.3.3的项目中整合Mybatis-plus后,启动项目时报了错:Invalid bean definition with name \'hotSearchMapper\' defined in file [E:\\project\\EasyHotSearch\\target\\classes\\com\\fc\\easyhotsearch\\mapper\\HotSearchMapper.class]: Invalid value type for attribute \'factoryBeanObjectType
报错截图如下

报错堆栈信息如下:
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name \'hotSearchMapper\' defined in file [E:\\project\\EasyHotSearch\\target\\classes\\com\\fc\\easyhotsearch\\mapper\\HotSearchMapper.class]: Invalid value type for attribute \'factoryBeanObjectType\': java.lang.Stringat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:857) ~[spring-beans-6.1.12.jar:6.1.12]at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:743) ~[spring-beans-6.1.12.jar:6.1.12]at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAnnotationOnBean(DefaultListableBeanFactory.java:735) ~[spring-beans-6.1.12.jar:6.1.12]at org.springframework.boot.sql.init.dependency.AnnotationDependsOnDatabaseInitializationDetector.detect(AnnotationDependsOnDatabaseInitializationDetector.java:36) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.detectDependsOnInitializationBeanNames(DatabaseInitializationDependencyConfigurer.java:152) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.postProcessBeanFactory(DatabaseInitializationDependencyConfigurer.java:115) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:363) ~[spring-context-6.1.12.jar:6.1.12]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:197) ~[spring-context-6.1.12.jar:6.1.12]at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:789) ~[spring-context-6.1.12.jar:6.1.12]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:607) ~[spring-context-6.1.12.jar:6.1.12]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.3.jar:3.3.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.3.jar:3.3.3]at com.fc.easyhotsearch.EasyHotSearchApplication.main(EasyHotSearchApplication.java:12) ~[classes/:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.3.jar:3.3.3]
原因分析
一般来讲,org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name ‘xxxxMapper’ defined in file [xxxx.class] … 这样的异常多半是由以下原因造成:
- xxxxMapper接口没有@Mapper注解
application.properties或application.yml配置文件中的mybatis.mapper-locations属性没有正确指向了你的Mapper XML文件或者启动类使用了@MapperScan注解没有指定Mapper接口所在的包。
但是还有一些情况很特殊,即 SpringBoot的版本与MyBatis-Plus 的版本不兼容,也会导致SpringBoot无法扫描到所定义的mapper。
- SpringBoot2所兼容的MyBatis-Plus依赖如下所示:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>Latest Version</version></dependency>
- SpringBoot3所兼容的MyBatis-Plus依赖如下所示:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>Latest Version</version></dependency>

解决方案
前提:确认项目中mapper接口已标注@Mapper注解,并且启动类上@MapperScan注解已指定mapper所在的包
确认无误后 ,根据上述原因分析,检查自己项目SpringBoot 版本与MyBatis-Plus依赖的版本是否兼容,若不兼容,修改相应pom文件中MyBatis-Plus的依赖版本即可
我的项目引入的MyBatis-Plus的依赖版本如下:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> </dependency>
项目中SpringBoot版本如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.3</version> <relativePath/> </parent>
显然地,SpringBoot 版本与MyBatis-Plus依赖的版本不兼容!!!
修改如下:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.7</version> </dependency>
再次启动项目

参考资料
- mybatis-plus GitHub仓库主页README说明
- SpringBoot3整合MyBatisPlus时遇到的问题及解决办法


