springboot升级到3.2导致mybatis-plus启动报错

文章讲述了在将SpringBoot升级到3.2版本时遇到的`IllegalArgumentException`,原因是mybatis-plus的依赖与mybatis-spring版本不匹配。解决方法是升级mybatis-spring到3.0以上版本,并正确配置依赖以排除旧版本并添加新版本。

在springboot升级到3.2时,服务启动报错 java.lang.IllegalArgumentException: Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String

java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getTypeForFactoryBeanFromAttributes(FactoryBeanRegistrySupport.java:86)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:838)
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:620)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:573)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:532)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:138)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:323)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331)
	at com.clou.ess.WebApplication.main(WebApplication.java:20)

这主要是因为 mybatis-plus 依赖的 mybatis-spring 版本低导致的问题,只需要将 mybatis-spring 升级到3.0以上就可以了,将原来的依赖排除掉添加高版本的依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.4.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

重新加载maven就可以解决问题。
请添加图片描述
请添加图片描述

<think>好的,我现在需要解决用户在使用JDK21、Spring Boot 3.2.5和Mybatis-Plus升级启动项目时遇到的错误:invalid value type for factoryObjectBeanType: java.lang.String。首先,我应该回顾用户提供的引用内容,尤其是引用[4],里面提到Spring Boot 3Mybatis-Plus的版本兼容性问题,以及依赖冲突的问题。 用户的环境是JDK21和Spring Boot 3.2.5,所以需要确认Mybatis-Plus是否有对应支持这两个版本的稳定版本。根据引用[4]中的解决方案,Mybatis-PlusMybatis的依赖不能同时存在,而且Spring Boot 3对应的依赖包名称可能不同。用户可能还在pom.xml中同时引入了MybatisMybatis-Plus,或者Mybatis-Plus的版本过低,导致不兼容。 首先,检查Mybatis-Plus的版本。Spring Boot 3.x需要Mybatis-Plus 3.5.5或更高版本。用户应该确保使用的是这个版本或更新的。然后,确认依赖配置是否正确,特别是是否有重复的Mybatis依赖。比如,是否同时引入了mybatis-spring-boot-starter和mybatis-plus-spring-boot3-starter,这会导致冲突。 另外,引用[4]提到,Spring Boot 3对应的Mybatis-Plus依赖包名可能不同。例如,正确的依赖应该是mybatis-plus-spring-boot3-starter,而不是之前的mybatis-plus-boot-starter。如果用户使用的是旧的依赖名称,需要更新为适用于Spring Boot 3的版本。 接下来,可能需要检查项目的依赖树,排除掉可能存在的旧版本或冲突的依赖。使用Maven的dependency:tree命令可以帮助识别问题。如果存在其他库间接引入了Mybatis的老版本,也需要排除。 最后,确保代码中没有同时使用MybatisMybatis-Plus的注解或配置,这可能导致工厂Bean类型不匹配。例如,@MapperScan的包是否正确指向Mybatis-Plus的组件。 总结步骤:升级Mybatis-Plus到兼容版本,检查依赖冲突,更新依赖名称,排除旧依赖,清理并重新构建项目。如果用户按照这些步骤操作,应该能解决启动报错的问题。</think>### 解决方案分步说明 #### 1. 确认MyBatis-Plus版本兼容性 - **必须使用MyBatis-Plus 3.5.5以上版本**,推荐使用最新稳定版(当前最新为3.5.6) - Spring Boot 3.2.x需配合`mybatis-plus-spring-boot3-starter`依赖包 ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.6</version> </dependency> ``` #### 2. 排除冲突依赖 - 检查`pom.xml`中是否同时存在以下冲突依赖: - `mybatis-spring-boot-starter` - `mybatis-plus-boot-starter`(旧版命名) - 移除所有MyBatis原生依赖,保留**唯一**的MyBatis-Plus依赖 #### 3. 验证JDK兼容性 - JDK21需配合MyBatis-Plus 3.5.5+版本 - 检查项目编译配置: ```xml <properties> <java.version>21</java.version> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> </properties> ``` #### 4. 清理构建缓存 执行Maven强制清理并重新编译: ```bash mvn clean install -U ``` #### 5. 验证注解配置 检查启动类`@MapperScan`注解是否正确引用MyBatis-Plus包: ```java @MapperScan("com.yourpackage.mapper") // 无需指定具体实现类 ``` #### 6. 检查配置文件 确保没有混合使用MyBatis原生配置项(如`mybatis.configuration.*`),应使用MyBatis-Plus专属配置: ```yaml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` ### 版本对照表 | 组件 | 要求版本 | 错误版本示例 | |---------------|-----------------------|-------------------| | Spring Boot | 3.2.x | 2.x.x | | MyBatis-Plus | 3.5.5+ | 3.4.x | | JDK | 17+ | 8/11 | ### 典型错误配置示例 ```xml <!-- 错误示例:混合使用旧版依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <!-- 必须移除 --> <version>2.3.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <!-- 旧版命名 --> <version>3.4.3</version> </dependency> ``` ### 验证成功的配置示例 ```xml <!-- 正确示例:Spring Boot 3专用依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.6</version> </dependency> ``` ### 技术原理说明 该错误本质是MyBatis的`SqlSessionFactoryBean`未能正确识别类型元数据。MyBatis-Plus 3.5.5+版本针对Spring Boot 3.x重构了自动配置逻辑,通过`MybatisPlusAutoConfiguration`类重写了`sqlSessionFactory`方法,确保类型安全注入[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值