Spring Boot Jar启动Bean创建失败及MyBatis配置问题求助
解决Spring Boot打包Jar后MyBatis类型别名解析失败及Mapper XML路径配置问题
一、修复类型别名“cart”无法解析的问题
- 检查MyBatis类型别名包配置:在
application.yml或application.properties中指定实体类所在包,让MyBatis自动扫描并生成别名。示例(yml格式):
mybatis: type-aliases-package: com.yourproject.entity # 替换为cart类所在的实际包路径
注:MyBatis默认将类名首字母小写作为别名,若实体类用@Alias("cart")注解指定别名,需确保注解拼写正确,且实体类所在包被Spring扫描覆盖。
- 确认实体类被Spring管理:实体类所在包需在Spring的扫描范围内,若自定义了
@ComponentScan路径,要包含实体类包。
二、配置sqlSessionFactoryBean指向指定Mapper XML文件
方式1:Java配置类实现
如果项目用Java配置类定义SqlSessionFactory,直接设置mapperLocations指向目标路径:
import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); // 同时设置类型别名包,解决cart别名问题 sessionFactoryBean.setTypeAliasesPackage("com.yourproject.entity"); // 加载src/main/resources/mapper/forum下的所有XML文件 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/forum/*.xml")); return sessionFactoryBean.getObject(); } }
方式2:配置文件实现
直接在application.yml中配置Mapper文件路径,无需编写Java配置类:
mybatis: type-aliases-package: com.yourproject.entity mapper-locations: classpath:mapper/forum/*.xml # 精准指向目标目录下的XML文件
三、验证打包时Mapper XML文件是否被包含
本地IDEA运行正常但Jar包缺失文件,大概率是打包配置未包含resources目录下的XML文件。检查pom.xml的build配置,确保添加资源包含规则:
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.yml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build>
执行mvn clean package重新打包后,解压Jar包查看BOOT-INF/classes/mapper/forum/下是否存在目标XML文件。
内容的提问来源于stack exchange,提问作者Amlieades
相关产品推荐
相关产品推荐

