Spring Boot 启动失败:MyBatis Mapper 解析错误
Spring Boot 启动失败:MyBatis Mapper 解析错误
错误日志
2023-10-10 09:36:39.980 INFO 10632 --- [ main] com.scq.App : Starting App using Java 1.8.0_382 on DESKTOP-HI33LOB with PID 10632 (D:\idea.2022\CRM-root-1\mapper\target\classes started by ACER in D:\idea.2022\CRM-root-1)
2023-10-10 09:36:39.984 INFO 10632 --- [ main] com.scq.App : No active profile set, falling back to 1 default profile: 'default'
2023-10-10 09:36:40.913 WARN 10632 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.scq]' package. Please check your configuration.
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
2023-10-10 09:36:41.763 WARN 10632 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.io.IOException: Failed to parse mapping resource: 'file [D:\idea.2022\CRM-root-1\mapper\target\classes\mapper\DictionaryTypeMapper.xml]'
2023-10-10 09:36:41.779 INFO 10632 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-10-10 09:36:41.836 ERROR 10632 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.io.IOException: Failed to parse mapping resource: 'file [D:\idea.2022\CRM-root-1\mapper\target\classes\mapper\DictionaryTypeMapper.xml]'
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:633) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:921) ~[spring-context-5.3.30.jar:5.3.30]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.30.jar:5.3.30]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) [spring-boot-2.7.16.jar:2.7.16]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) [spring-boot-2.7.16.jar:2.7.16]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-2.7.16.jar:2.7.16]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) [spring-boot-2.7.16.jar:2.7.16]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) [spring-boot-2.7.16.jar:2.7.16]
at com.scq.App.main(App.java:16) [classes/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.io.IOException: Failed to parse mapping resource: 'file [D:\idea.2022\CRM-root-1\mapper\target\classes\mapper\DictionaryTypeMapper.xml]'
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.30.jar:5.3.30]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-5.3.30.jar:5.3.30]
... 18 common frames omitted
Caused by: java.io.IOException: Failed to parse mapping resource: 'file [D:\idea.2022\CRM-root-1\mapper\target\classes\mapper\DictionaryTypeMapper.xml]'
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:700) ~[mybatis-spring-2.1.1.jar:2.1.1]
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:577) ~[mybatis-spring-2.1.1.jar:2.1.1]
at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:720) ~[mybatis-spring-2.1.1.jar:2.1.1]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.sqlSessionFactory(MybatisAutoConfiguration.java:187) ~[mybatis-spring-boot-autoconfigure-2.3.1.jar:2.3.1]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$9746b243.CGLIB$sqlSessionFactory$2(<generated>) ~[mybatis-spring-boot-autoconfigure-2.3.1.jar:2.3.1]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$9746b243$$FastClassBySpringCGLIB$$a96732dd.invoke(<generated>) ~[mybatis-spring-boot-autoconfigure-2.3.1.jar:2.3.1]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.30.jar:5.3.30]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.30.jar:5.3.30]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$9746b243.sqlSessionFactory(<generated>) ~[mybatis-spring-boot-autoconfigure-2.3.1.jar:2.3.1]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_382]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_382]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_382]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_382]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.30.jar:5.3.30]
... 19 common frames omitted
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\idea.2022\CRM-root-1\mapper\target\classes\mapper\DictionaryTypeMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:128) ~[mybatis-3.5.13.jar:3.5.13]
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:100) ~[mybatis-3.5.13.jar:3.5.13]
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:698) ~[mybatis-spring-2.1.1.jar:2.1.1]
... 32 common frames omitted
Caused by: org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118) ~[mybatis-3.5.13.jar:3.5.13]
... 34 common frames omitted
进程已结束,退出代码1
问题分析
根据日志信息,有以下问题需要解决:
-
找不到MyBatis的Mapper:日志中显示'No MyBatis mapper was found in '[com.scq]' package. Please check your configuration.',这可能是因为没有正确配置Mapper扫描路径。请检查配置文件中的Mapper扫描路径是否正确。
-
解析Mapper XML错误:日志中显示'Mapper's namespace cannot be empty',这可能是因为Mapper XML文件中的namespace为空。请检查Mapper XML文件中的namespace是否正确配置。
-
解析Mapper XML错误:日志中显示'Failed to parse mapping resource',这可能是因为Mapper XML文件的解析错误。请检查Mapper XML文件是否正确配置,特别是检查XML文件的格式、标签是否正确闭合等。
解决方法
-
检查Mapper扫描路径配置:
- 在 Spring Boot 的配置文件(application.properties 或 application.yml)中,确保配置了正确的Mapper扫描路径,例如:
mybatis.mapper-locations=classpath*:mapper/*.xml
- 在 Spring Boot 的配置文件(application.properties 或 application.yml)中,确保配置了正确的Mapper扫描路径,例如:
-
检查Mapper XML文件的namespace配置:
- 打开
DictionaryTypeMapper.xml文件,确保<mapper>标签的namespace属性已正确设置,例如:<mapper namespace="com.scq.mapper.DictionaryTypeMapper"> ... </mapper>namespace属性的值应与Mapper接口的完全限定名一致。
- 打开
-
检查Mapper XML文件格式和标签闭合:
- 仔细检查
DictionaryTypeMapper.xml文件的格式,确保 XML 文件的格式正确、标签正确闭合,没有语法错误。 - 可以使用 XML 编辑器或在线验证工具来检查 XML 文件的格式。
- 仔细检查
总结
通过检查以上三个方面的问题,并进行相应的修改,即可解决Spring Boot启动失败:MyBatis Mapper解析错误的问题。
原文地址: http://www.cveoy.top/t/topic/pb2U 著作权归作者所有。请勿转载和采集!