目录
一、什么是 resultType
1. 定义
2. 特点
3. 使用场景
4. 示例
示例 1:返回一个实体类对象
对应的 Java 类:
示例 2:返回 Map 集合
返回的每个记录是一个 Map,例如:
二、什么是 resultMap
1. 定义
2. 特点
3. 使用场景
4. 示例
示例 1:基础字段映射
示例 2:嵌套对象映射(一对一)
XML 映射如下:
示例 3:一对多映射(用户与订单)
XML 映射如下:
三、resultType 与 resultMap 的对比总结
四、何时使用 resultType?何时使用 resultMap?
在使用 MyBatis 进行数据库操作时,我们经常需要将查询结果映射到 Java 对象中。MyBatis 提供了两种主要的方式来进行结果映射:resultType 和 resultMap。本文将详细介绍这两者的区别、适用场景,并通过代码示例帮助你更好地理解和应用。
一、什么是 resultType
1. 定义
resultType 是 MyBatis 中用于指定 SQL 查询结果直接映射为 Java 类型(如实体类、基本类型或 Map)的属性。
2. 特点
适用于简单查询,字段名与目标类的属性名一一对应。
自动完成映射,无需手动配置。
支持常见的 Java 类型:
基本数据类型(int、String 等)Java Bean(POJO)Map(返回结果以 key-value 形式存储)
3. 使用场景
单表查询,列名和 POJO 字段一致。
返回值为单个对象或集合。
不涉及复杂关联映射(如多对一、一对多等)。
4. 示例
示例 1:返回一个实体类对象
SELECT * FROM user WHERE id = #{id}
对应的 Java 类:
public class User {
private int id;
private String name;
private String email;
// getters and setters
}
示例 2:返回 Map 集合
SELECT id, name FROM user
返回的每个记录是一个 Map
{id=1, name="张三"}
二、什么是 resultMap
1. 定义
resultMap 是 MyBatis 中用于定义自定义映射关系的标签。它允许开发者手动指定数据库列与 Java 对象属性之间的映射规则。
2. 特点
可处理复杂的映射关系(如字段不一致、嵌套对象、关联查询等)。
更加灵活,但需要手动编写映射配置。
支持延迟加载、联合查询、继承等高级特性。
3. 使用场景
数据库列名与 Java 属性名不一致。
多表联查,返回包含多个对象的数据结构。
一对多、多对一等关联关系映射。
需要复用映射逻辑
4. 示例
示例 1:基础字段映射
SELECT user_id, user_name, user_email FROM user
示例 2:嵌套对象映射(一对一)
假设有一个 User 对应一个 Address:
public class Address {
private String city;
private String street;
// getters and setters
}
public class User {
private int id;
private String name;
private Address address;
// getters and setters
}
XML 映射如下:
SELECT u.id, u.name, a.city, a.street
FROM user u
LEFT JOIN address a ON u.address_id = a.id
示例 3:一对多映射(用户与订单)
public class Order {
private int orderId;
private double amount;
// getters and setters
}
public class User {
private int id;
private String name;
private List
// getters and setters
}
XML 映射如下:
SELECT u.id, u.name, o.order_id, o.amount
FROM user u
LEFT JOIN orders o ON u.id = o.user_id
三、resultType 与 resultMap 的对比总结
对比项
resultType
resultMap
是否需要手动配置
否
是
映射方式
自动匹配字段名
手动指定映射关系
适用场景
简单查询,字段一致
复杂查询,字段不一致、嵌套对象、关联查询等
性能
稍快
稍慢(需解析映射关系)
可读性与可维护性
简洁易懂
更复杂,但更灵活
四、何时使用 resultType?何时使用 resultMap?
场景
推荐使用
单表查询,字段名与 Java 属性一致
resultType
返回基本类型(如 Integer、String
resultType
返回 Map 类型
resultType
字段名与 Java 属性名不一致
resultMap
包含嵌套对象或集合
resultMap
多表联查返回复杂结构
resultMap
需要复用映射逻辑
resultMap