MyBatis中resultMap继承的核心是准确定义、稳定继承与清晰扩展,需抽取公共字段为baseEntityResultMap,按业务层级逐级extends,SQL查询精准引用对应映射,并与Java类继承严格对齐以保障映射一致性。

用 extends 在持久层映射中实现高复用,核心不是“写得少”,而是“定义得准、继承得稳、扩展得清”。MyBatis 的 resultMap 继承和 Java 类继承虽语法相似,但目标不同:前者复用字段映射逻辑,后者复用行为与状态。两者结合使用,才能真正盘活数据层代码资产。
提取公共字段映射为 baseResultMap
多数业务实体都带基础元数据:id、create_time、update_time、is_deleted 等。把这些字段统一抽取到一个顶层 resultMap 中,作为所有映射的“基类”。
- 命名清晰,如
baseEntityResultMap,类型设为最通用的父类(如BaseEntity或Object) - 只放真正共用、语义稳定的字段映射,避免塞入某两个实体“碰巧相同”的临时字段
- 配合数据库设计,确保这些字段在物理表中列名一致(或通过 column 属性统一映射)
按业务实体层级逐级 extends
当实体存在天然继承关系时(如 User → Admin → SuperAdmin),resultMap 继承应严格对齐领域模型。
-
adminResultMapextendsbaseEntityResultMap,补充role、dept_id -
superAdminResultMapextendsadminResultMap,再加permissions_json - 每个子映射只声明自己独有的字段,不重复父级已定义的内容
SQL 查询中精准引用对应 resultMap
复用的前提是调用正确。不同查询返回不同粒度的数据,需匹配相应层级的 resultMap。
- 查列表页:用
baseEntityResultMap或adminResultMap,避免加载冗余字段 - 查详情页:用最具体的
superAdminResultMap,保障字段完整 - 多表关联结果复杂时,可新建专用 resultMap,仍可 extends 公共基础映射,再叠加
<association>或<collection>
与 Java 类继承协同设计
让 XML 映射和 Java 类型形成双向支撑:
- Java 中定义
class Admin extends User,XML 中就用extends="userResultMap",保持 is-a 一致性 - 父类字段(如
id、createdAt)在 Java 中设为protected,搭配publicgetter/setter,便于 MyBatis 反射赋值 - 避免 XML 里 extends 了 A,而 Java 类却继承自 B —— 这种错位会导致映射失败或字段丢失

















