MyBatis中select查询结果映射使用resultType还是resultMap
在 MyBatis 中选择 resultType 还是 resultMap 核心取决于结果映射的复杂度,二者各有适用场景,以下是详细的对比和选择原则:
一、核心区别特性
resultType
resultMap
核心作用
直接指定返回类型,自动映射字段
自定义映射规则,手动配置字段映射
映射规则
字段名与属性名完全一致时自动映射
支持字段名与属性名不一致、关联查询、复杂类型映射
灵活性
低(仅支持简单自动映射)
高(可定制所有映射规则)
适用场景
简单查询、字段名与属性名一致
复杂查询、字段名与属性名不一致、关联查询等
二、resultType:简单场景首选适用场景
- 查询结果字段名与实体类属性名完全一致(包括大小写,MyBatis 默认开启驼峰命名转换时,数据库下划线字段可映射到驼峰属性,如 user_name → userName);
- 返回简单类型(如 String、Integer、Long);
- 返回 Map 类型(字段名作为 key,值作为 value)。
- 返回实体类(字段名与属性名一致):
- 返回简单类型:
- 返回 Map
三、resultMap:复杂场景必选适用场景
- 字段名与实体类属性名不一致(如数据库字段 u_id → 实体属性 id);
- 关联查询(一对一、一对多、多对多,如用户关联订单、订单关联商品);
- 嵌套结果映射(复杂对象嵌套,如 User 包含 Address 对象);
- 自定义类型转换(如数据库 varchar 映射到枚举、日期格式转换);
- 需要复用映射规则(多个查询共用同一套映射规则)。
- 字段名与属性名不一致:
- 一对一关联查询(用户关联地址):
四、选择原则
- 优先用 resultType:如果字段名与属性名一致(或开启驼峰转换后一致),且无关联查询,用 resultType 更简洁;
- 必须用 resultMap:满足以下任一条件则用 resultMap:字段名与属性名不一致;包含关联查询(一对一、一对多等);需要自定义类型转换;需要复用映射规则。
MyBatis 支持通过配置 mapUnderscoreToCamelCase 自动将数据库下划线字段(如 user_name)映射到实体驼峰属性(如 userName),开启后可减少 resultMap 的使用:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
