在 MyBatis 中选择 resultType 还是 resultMap 核心取决于结果映射的复杂度,二者各有适用场景,以下是详细的对比和选择原则:

一、核心区别

  特性

  resultType

  resultMap

  核心作用

  直接指定返回类型,自动映射字段

  自定义映射规则,手动配置字段映射

  映射规则

  字段名与属性名完全一致时自动映射

  支持字段名与属性名不一致、关联查询、复杂类型映射

  灵活性

  低(仅支持简单自动映射)

  高(可定制所有映射规则)

  适用场景

  简单查询、字段名与属性名一致

  复杂查询、字段名与属性名不一致、关联查询等

  MyBatis中select查询结果映射使用resultType还是resultMap二、resultType:简单场景首选适用场景

  1. 查询结果字段名与实体类属性名完全一致(包括大小写,MyBatis 默认开启驼峰命名转换时,数据库下划线字段可映射到驼峰属性,如 user_name → userName);
  2. 返回简单类型(如 String、Integer、Long);
  3. 返回 Map 类型(字段名作为 key,值作为 value)。
示例
  1. 返回实体类(字段名与属性名一致):

  

  1. 返回简单类型:

  

  1. 返回 Map

  三、resultMap:复杂场景必选适用场景

  1. 字段名与实体类属性名不一致(如数据库字段 u_id → 实体属性 id);
  2. 关联查询(一对一、一对多、多对多,如用户关联订单、订单关联商品);
  3. 嵌套结果映射(复杂对象嵌套,如 User 包含 Address 对象);
  4. 自定义类型转换(如数据库 varchar 映射到枚举、日期格式转换);
  5. 需要复用映射规则(多个查询共用同一套映射规则)。
示例
  1. 字段名与属性名不一致:

  

  1. 一对一关联查询(用户关联地址):

   四、选择原则

  1. 优先用 resultType:如果字段名与属性名一致(或开启驼峰转换后一致),且无关联查询,用 resultType 更简洁;
  2. 必须用 resultMap:满足以下任一条件则用 resultMap:字段名与属性名不一致;包含关联查询(一对一、一对多等);需要自定义类型转换;需要复用映射规则。
补充:驼峰命名转换

  MyBatis 支持通过配置 mapUnderscoreToCamelCase 自动将数据库下划线字段(如 user_name)映射到实体驼峰属性(如 userName),开启后可减少 resultMap 的使用: