SpringBoot3.2.x整合MyBatis-Plus3.x报错

文章讲述了在SpringBoot3.2.1中整合MyBatis-Plus时遇到的两个常见问题:依赖错误和类型不匹配,提供了解决方案,包括正确引入依赖和配置mapper接口。还提及了SQL日志设置和驼峰命名转下划线的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot3整合MyBatis-Plus报错挺折磨人的。。。好好看官方文档

MyBatis-Plus 官方文档地址:https://baomidou.com/
报错1:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.xxx.mapper.UserMapper.selectList   

出现这种错误的话,应该是你的MyBatis-Plus引入的依赖错误

  • 官方文档要求引入的依赖如下图:
    MyBatis-Plus引入依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>最新版本</version>
</dependency>

报错2:

Bean named 'ddlApplicationRunner' is expected to be of type 'org.springframework.boot.Runner' but was actually of type 'org.springframework.beans.factory.support.NullBean'

SpringBoot3.2.1整合MyBatis-Plus出现了这种错误;请将MyBatis-Plus依赖的版本换成最新版本

解决方案:

   <dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
       <version> 3.5.5</version>
   </dependency>

一般来说就这两个问题

如果出现了

Failed to load ApplicationContext for [WebMergedContextConfiguration@49e2b3c5 testClass = com.mahua.juanjucenter.JuanjuCenterApplicationTests, locations = [], classes = [com.xxx.xxxx.xxxApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@e350b40, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@13e344d, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@740cae06, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@75d3a5e0, org.springframework.boot.test.context.SpringBootTestAnnotation@62e60f77], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) ~[spring-test-6.1.2.jar:6.1.2]
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.2.jar:6.1.2]
	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.2.jar:6.1.2]
	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.2.jar:6.1.2]
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.2.jar:6.1.2]
	at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.2.jar:6.1.2]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.1.jar:5.10.1]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.1.jar:5.10.1]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.1.jar:5.10.1]
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na]
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[na:na]
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) ~[na:na]
//以及

 Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: 

这种错误,读不了dataSource说明一个application.yml文件出现了错误,请确保数据库配置信息缩进恰当
application.yml文件配置错误

报错3:

 Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'baseMapper': No qualifying bean of type 'com.xxx.xxxx.mapper.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.2.jar:6.1.2]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.2.jar:6.1.2]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.2.jar:6.1.2]

这种一般是mapper层的mapper接口没有加上@Mapper注解

  • 补充内容:开始MyBatis-Plus的SQL日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 驼峰命名转换为下划线
    官方文档所示MyBatis-Plus是默认开启转换的,而MyBatis则是默认关闭转换的,当集成MyBatis-Plus框架时,不需要再开启驼峰命名转换为下划线。
    在这里插入图片描述
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
<think>好的,我现在需要解决用户提出的关于SpringBoot整合MyBatis-Plus时出现的com.baomidou包报错的问题。首先,我要回顾用户提供的引用内容,看看里面提到的解决方案有哪些。 根据引用[1]和[2],问题可能出在Spring Boot的版本与MyBatis-Plus的兼容性上。特别是Spring Boot 3.x可能与旧版的MyBatis-Plus不兼容,建议更换Spring Boot到2.x版本或者升级MyBatis-Plus到最新版本。引用[4]中提到了使用MyBatis-Plus 3.5.5版本的依赖,而引用[2]则建议换成最新版本。另外,引用[3]提到版本冲突和空指针异常,可能需要检查依赖冲突,使用Maven的依赖树分析工具。引用[5]则指出需要替换SqlSessionFactoryBean为MybatisSqlSessionFactoryBean,这可能是一个配置类的问题。 接下来,我需要将这些信息整理成步骤。首先检查Spring Boot和MyBatis-Plus的版本是否兼容。如果用户用的是Spring Boot 3.x,可能需要降级到2.x或者升级MyBatis-Plus到支持3.x的版本。然后检查依赖冲突,排除旧版本的mybatismybatis-plus。接着,修改配置类中的SqlSessionFactoryBean。如果问题依旧,可能需要检查包扫描路径是否正确,或者是否有其他配置问题。最后,清理Maven并重新构建项目。 需要注意的是,用户可能不太熟悉如何具体操作这些步骤,所以需要给出具体的代码示例,比如pom.xml中的依赖配置和Java配置类的修改。同时,要提醒用户遇到的具体错误信息可能不同,需要根据实际情况调整解决方案。 另外,用户的问题是关于包名报错,可能涉及类找不到或者版本不匹配,所以需要涵盖版本调整、依赖排除、配置类修改等多个方面。确保每个步骤都有对应的引用支持,比如引用[1]和[2]对应版本问题,引用[5]对应配置类问题,引用[3]对应依赖冲突。 最后,生成相关问题,帮助用户进一步排查可能遇到的其他问题,比如性能分析、优化方法、应用场景等,但根据用户的问题,可能更相关的是其他整合问题,比如版本兼容性、配置错误、依赖冲突等,所以相关问题需要围绕这些方面来设计。</think>### 解决方案 #### 1. **检查Spring Boot与MyBatis-Plus版本兼容性** - **问题原因**:Spring Boot 3.x与MyBatis-Plus旧版本可能存在兼容性问题。例如,Spring Boot 3.2.x需要MyBatis-Plus 3.5.5或更高版本[^2][^4]。 - **解决方案**: - 若使用Spring Boot 3.x,需将MyBatis-Plus升级至最新版本(如3.5.5+): ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.6</version> <!-- 最新版本号需确认 --> </dependency> ``` - 若无法升级MyBatis-Plus,可将Spring Boot降级至2.x版本(如2.7.18)[^1]。 #### 2. **排除依赖冲突** - **问题原因**:项目中可能存在MyBatisMyBatis-Plus版本冲突,或旧版本残留导致类加载失败[^3]。 - **解决方案**: 在`pom.xml`中显式声明依赖并排除冲突: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.6</version> <exclusions> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </exclusion> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </exclusion> </exclusions> </dependency> ``` #### 3. **修改SqlSessionFactory配置** - **问题原因**:Spring Boot 3.x中需使用MyBatis-Plus专属的`MybatisSqlSessionFactoryBean`替代默认的`SqlSessionFactoryBean`[^5]。 - **解决方案**: ```java @Configuration public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); // 关键修改 factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } } ``` #### 4. **检查包扫描路径** - **问题原因**:未正确扫描MyBatis-Plus的Mapper接口或实体类。 - **解决方案**: - 在启动类添加注解: ```java @MapperScan("com.example.mapper") // 替换为实际Mapper接口路径 ``` - 在`application.properties`中配置实体类扫描: ```properties mybatis-plus.type-aliases-package=com.example.entity ``` #### 5. **清理Maven并重新构建** - 执行以下命令确保依赖完全更新: ```bash mvn clean install -U ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

闻音麻花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值