【已解决】SpringBoot3项目整合Mybatis-plus启动项目报错:Invalid bean definition with name ‘xxxMapper‘ defined in flle


问题描述

最近,在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.String
	at 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] … 这样的异常多半是由以下原因造成:

  1. xxxxMapper接口没有@Mapper注解
  2. application.propertiesapplication.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的依赖版本如下:

 <!-- 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/> <!-- lookup parent from repository -->
    </parent>

显然地,SpringBoot 版本与MyBatis-Plus依赖的版本不兼容!!!

修改如下:

        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-spring-boot3-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.7</version>
        </dependency>

再次启动项目

在这里插入图片描述


参考资料

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot整合Mybatis-Plus多数据源时,出现“Access denied for user 'root'@'localhost' (using password: NO)”错误,可能是因为配置文件中的密码没有正确识别。可以尝试以下解决方法: 1.检查配置文件中的密码是否正确,特别是在使用yml文件时,需要注意缩进和格式是否正确。 2.在配置文件中明确指定使用的数据源,例如: ```java @Configuration @MapperScan(basePackages = "com.example.demo.mapper") public class DataSourceConfig { @Bean(name = "dataSource1") @ConfigurationProperties(prefix = "spring.datasource.ds1") public DataSource dataSource1() { return DataSourceBuilder.create().build(); } @Bean(name = "dataSource2") @ConfigurationProperties(prefix = "spring.datasource.ds2") public DataSource dataSource2() { return DataSourceBuilder.create().build(); } @Bean(name = "dynamicDataSource") public DynamicDataSource dynamicDataSource(@Qualifier("dataSource1") DataSource dataSource1, @Qualifier("dataSource2") DataSource dataSource2) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put(DataSourceEnum.DATA_SOURCE1.getValue(), dataSource1); targetDataSources.put(DataSourceEnum.DATA_SOURCE2.getValue(), dataSource2); return new DynamicDataSource(dataSource1, targetDataSources); } } ``` 3.检查数据库用户的权限是否正确,可以使用以下命令修改密码: ```sql USE mysql;#mysql配置库 ALTER USER root@localhost IDENTIFIED BY 'newpasswd3'; # 修改密码 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上少年,且听这风吟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值