Result Maps collection already contains value for com.*.*.*Mapper.BaseResultMap

问题:在使用MyBatis的过程中,启动项目总是报错误,如下

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.*.*.*Mapper.BaseResultMap

分析:该错误提示为解析mapper xml文件的时候,出现了异常的参数,也就是重复定义的Result Maps 标签的BaseResultMap。

因为MyBatis的mapper xml是以namespace作为区别的标识的,因此判断是mapper xml中相同的接口配置,检查后发现是有两个mapper xml配置了相关的mapper接口。

解决:修改为各自mapper xml对应的mapper接口即可

在 MyBatis 中出现 `Result Maps collection already contains value for` 错误通常是因为多个映射文件或映射配置中定义了相同名称的 `resultMap`。具体到错误信息中的 `com.ruoyi.business.mapper.ChapterMapper.ChapterResult`,问题可能来源于以下几个方面: 1. **重复的 `resultMap` 定义**:在同一个 XML 文件或者多个 XML 文件中,存在两个及以上名为 `ChapterResult` 的 `resultMap` 定义。 2. **MyBatis 配置文件加载了重复的映射文件**:如果 `ChapterMapper.xml` 被多次加载(例如,在 `mybatis-config.xml` 或 Spring 配置中重复注册),则会导致其中的 `resultMap` 也被重复注册。 3. **逆向工程生成代码冲突**:使用 MyBatis 逆向工程时,如果多次运行生成工具,可能会在 XML 文件中添加重复的 SQL 映射和 `resultMap` 定义,导致冲突 [^3]。 ### 解决方案 - **检查并修改 `resultMap` 名称**:确保所有 `resultMap` 的 `id` 是唯一的。可以为重复的 `resultMap` 更改唯一标识符,以避免冲突。 - **确认映射文件未被重复加载**:检查 MyBatis 的主配置文件以及 Spring 配置文件,确保 `ChapterMapper.xml` 或包含该映射器的包没有被多次引入。 - **清理逆向工程生成内容**:如果使用了逆向工程插件,并且发现 `resultMap` 被重复生成,则应删除多余的定义,保留一份即可 [^3]。 - **使用命名空间隔离**:确保每个映射文件的 `namespace` 是唯一的,并且与对应的 Mapper 接口保持一致。这样有助于避免不同映射文件之间的 `resultMap` 冲突。 - **启用日志排查**:通过开启 MyBatis 的详细日志输出,可以查看具体的映射加载过程,帮助定位是哪个位置导致了 `resultMap` 的重复注册。 ### 示例代码 以下是一个典型的 `resultMap` 定义示例,确保其 `id` 值全局唯一: ```xml <resultMap id="ChapterResult" type="com.ruoyi.business.model.Chapter"> <id property="id" column="id" /> <result property="title" column="title" /> <result property="content" column="content" /> </resultMap> ``` 如果发现重复,可将其更改为如下形式: ```xml <resultMap id="ChapterResultV2" type="com.ruoyi.business.model.Chapter"> <id property="id" column="id" /> <result property="title" column="title" /> <result property="content" column="content" /> </resultMap> ``` 同时,更新所有引用该 `resultMap` 的查询语句,使其指向新的 `id`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值