spring boot结合mybatis时,使用mapper.xml来配置,启动入口类却找不到映射文件的解决方法之一

本文介绍了一种常见的Spring Boot应用启动失败的问题及解决方案。通过在入口类中正确使用@MapperScan注解指定mapper接口的位置,使得Spring Boot能够成功加载数据库配置并启动。
启动入口类,启动不成功的提示


但是,我已经在application.properties文件中加载配置,但还是找不着


弄了挺久的,终于找到解决问题之一,就是在入口类这里加多了一个注解@MapperScan(basePackages = "com.example.demo.mapper")指定它扫描的包,程序就启动成功了,可以对数据库进行操作了:




### Spring配置 MyBatisMapper.xml 文件到指定目录 在 SpringMyBatis 结合使用的场景下,可以通过多种方式来配置 `Mapper.xml` 文件的位置。以下是几种常见的实现方法: #### 1. 使用 `<mappers>` 标签显式加载 XML 映射器 可以在 MyBatis 的核心配置文件(通常命名为 `mybatis-config.xml` 或其他自定义名称)中使用 `<mappers>` 标签手动指定映射文件的路径。 ```xml <mappers> <!-- 方式一:通过具体路径 --> <mapper resource="com/sun/dao/UserMapper.xml"/> <!-- 方式二:通过名 --> <mapper class="com.sun.dao.UserMapper"/> <!-- 方式三:通过包扫描 --> <package name="com.sun.dao"/> </mappers> ``` 上述代码片段展示了三种同的加载方式[^1]。其中第三种方式最为常用,它允许自动扫描指定包下的所有接口及其对应的 `Mapper.xml` 文件。 --- #### 2.Mapper.xml 放入 resources 资源目录 为了使 MyBatis 正确读取 `Mapper.xml` 文件,建议将其放置于项目的 `resources` 目录下。如果 `Mapper.xml` 文件位于 Java 源码目录而非标准资源目录,则需要调整其所在文件夹的属性为 “Resources Folder”,以便编译能够被正确识别并打包[^2]。 例如: - 如果 `UserMapper.xml` 存在于 `src/main/resources/com/sun/dao/` 下,则可以直接通过如下方式进行引用: ```xml <mapper resource="com/sun/dao/UserMapper.xml"/> ``` --- #### 3. 基于 Spring Boot 自动化配置 当项目基于 Spring Boot 构建,可以利用框架提供的自动化功能简化配置过程。只需确保以下条件满足即可完成默认配置: - 所有 `Mapper.xml` 文件均存放在 `resources/mapper` 或似的约定位置; - 接口所在的包已注册至 MyBatis 的扫描范围。 示例代码如下所示: ```yaml # application.yml 配置 mybatis: mapper-locations: classpath:/mapper/*.xml type-aliases-package: com.example.domain ``` 此 YAML 配置指定了 `Mapper.xml` 文件的具体存储路径以及实体别名的包路径[^4]。 --- #### 4. 动态生成 SqlSessionFactory 并设置 Mapper Locations 对于更复杂的场景,可能需要程序化地创建 `SqlSessionFactory` 实例并向其传递所需的参数。下面是一个典型的例子: ```java @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); // 设置 Mapper.xml 文件的位置 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sessionFactory.setMapperLocations(resolver.getResources("classpath:/mapper/**/*.xml")); return sessionFactory.getObject(); } ``` 在此代码段中,调用了 `setMapperLocations()` 方法动态指定了多个匹配模式下的 `Mapper.xml` 文件地址[^3]。 --- ### 总结 无论采用何种策略,在实际开发过程中都应遵循良好的实践原则——即保持清晰一致的命名规则与合理的分层结构设计,从而提升系统的可维护性和扩展性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值