MyBatis 中的 resultType 与 resultMap:区别、使用场景及示例详解

MyBatis 中的 resultType 与 resultMap:区别、使用场景及示例详解

目录

一、什么是 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:返回一个实体类对象

对应的 Java 类:

public class User {

private int id;

private String name;

private String email;

// getters and setters

}

示例 2:返回 Map 集合

返回的每个记录是一个 Map,例如:

{id=1, name="张三"}

二、什么是 resultMap

1. 定义

resultMap 是 MyBatis 中用于定义自定义映射关系的标签。它允许开发者手动指定数据库列与 Java 对象属性之间的映射规则。

2. 特点

可处理复杂的映射关系(如字段不一致、嵌套对象、关联查询等)。

更加灵活,但需要手动编写映射配置。

支持延迟加载、联合查询、继承等高级特性。

3. 使用场景

数据库列名与 Java 属性名不一致。

多表联查,返回包含多个对象的数据结构。

一对多、多对一等关联关系映射。

需要复用映射逻辑

4. 示例

示例 1:基础字段映射

示例 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 映射如下:

示例 3:一对多映射(用户与订单)

public class Order {

private int orderId;

private double amount;

// getters and setters

}

public class User {

private int id;

private String name;

private List orders;

// getters and setters

}

XML 映射如下:

三、resultType 与 resultMap 的对比总结

对比项

resultType

resultMap

是否需要手动配置

映射方式

自动匹配字段名

手动指定映射关系

适用场景

简单查询,字段一致

复杂查询,字段不一致、嵌套对象、关联查询等

性能

稍快

稍慢(需解析映射关系)

可读性与可维护性

简洁易懂

更复杂,但更灵活

四、何时使用 resultType?何时使用 resultMap?

场景

推荐使用

单表查询,字段名与 Java 属性一致

resultType

返回基本类型(如 Integer、String

resultType

返回 Map 类型

resultType

字段名与 Java 属性名不一致

resultMap

包含嵌套对象或集合

resultMap

多表联查返回复杂结构

resultMap

需要复用映射逻辑

resultMap

相关手记

365bet手机在线 2023抖音排名前十的美食主播
bet体育365官网安全吗 干货:台球低杆杆法打法图解
365bet手机在线 送女朋友花贺卡怎么写

送女朋友花贺卡怎么写

11-01 👁️ 1396
365提款一直在审核 鱼怎么生小鱼,鱼类怎么繁殖
bet体育365官网安全吗 电脑整机包含显示器吗(电脑整机包含什么)
bet体育365官网安全吗 原创文章一篇多少钱?全面解析原创文章定价的影响因素