SpringBoot整合MyBatis-Plus遇BeanDefinitionStoreException错误求助
问题排查与解决:MyBatis-Plus整合SpringBoot出现
factoryBeanObjectType类型错误 核心异常分析
你遇到的org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'bookDao' defined in file [...] Invalid value type for attribute 'factoryBeanObjectType': java.lang.String,本质是Spring解析MyBatis-Plus的Mapper Bean定义时触发了类型匹配失败,问题集中在版本兼容、注解冲突、依赖配置这几个方向。
具体解决步骤
版本兼容性检查
Spring Boot与MyBatis-Plus版本必须匹配,不兼容组合会触发反射/类型转换错误:- Spring Boot 2.7.x 搭配 MyBatis-Plus 3.5.1~3.5.3
- Spring Boot 3.x 搭配 MyBatis-Plus 3.5.3+ 或 4.0.0+
检查pom.xml(或build.gradle)中的依赖版本,示例:
<!-- Spring Boot 2.7.x + MyBatis-Plus 3.5.3 示例依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency>移除重复的Mapper注解
@Mapper和@MapperScan二选一即可,不要同时使用:- 若启动类
SSMPApplication.java已添加@MapperScan("你的dao包全路径"),直接删除BookDao.java上的@Mapper注解 - 若保留
BookDao上的@Mapper,则删除启动类上的@MapperScan
- 若启动类
清理冲突依赖
确保项目只引入MyBatis-Plus的starter依赖,不要同时引入原生MyBatis的starter,避免依赖冲突:<!-- 仅保留该依赖,删除mybatis-spring-boot-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency>校验application.yml配置
确认MyBatis-Plus的配置前缀为mybatis-plus,不要写成原生MyBatis的mybatis,示例正确配置:spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: 你的数据库密码 mybatis-plus: mapper-locations: classpath:mapper/*.xml # 有XML映射文件时配置,无则可省略 type-aliases-package: com.xxx.entity # 你的实体类包路径清理IDE缓存并重构
执行Maven/Gradle的clean+compile命令,或重启IDE,清除编译缓存导致的异常。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

