MyBatis 主mapper.xml 配置文件中出现的路径配置错误

文章讲述了在MyBatis主配置文件中遇到关于BlogMapper的错误,根源是XML解析时找不到Blog类型的类。解决方法是确保XML中的namespace和类路径配置完整。作者通过提供正确的配置示例解决了问题。

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

【MyBatis中主配置文件中出现的错误】
Error while adding the mapper ‘interface com.example.demo.mapper.BlogMapper’ to configuration.

Error parsing Mapper XML. The XML location is ‘com/example/demo/mapper/BlogMapper.xml’. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘Blog’. Cause: java.lang.ClassNotFoundException: Cannot find class: Blog

这个问题按照百度上面搜索的方法进行尝试后任然没有解决。但这个问题最本质的还是xml配置文件里类路径没有配置正确

问题配置如下:

此 type = “Blog” 在解析的过程中,无法识别User 类的位置,所以需要把完整的路径填写好,和 XML里的namespace配置类似

改进配置如下

运行后问题得到解决。

### 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]。 --- ### 总结 无论采用何种策略,在实际开发过程中都应遵循良好的实践原则——即保持清晰一致的命名规则与合理的分层结构设计,从而提升系统的可维护性和扩展性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值