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 类型:

    1. 基本数据类型(int、String 等)
    2. Java Bean(POJO)
    3. Map(返回结果以 key-value 形式存储)
3. 使用场景

单表查询,列名和 POJO 字段一致。

返回值为单个对象或集合。

不涉及复杂关联映射(如多对一、一对多等)。

4. 示例
示例 1:返回一个实体类对象
<select id="getUserById" resultType="com.example.model.User">SELECT * FROM user WHERE id = #{id}
</select>
对应的 Java 类:
public class User {private int id;private String name;private String email;// getters and setters
}
示例 2:返回 Map 集合
<select id="getUserMap" resultType="map">SELECT id, name FROM user
</select>
返回的每个记录是一个 Map<String, Object>,例如:
{id=1, name="张三"}

二、什么是 resultMap

1. 定义

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

2. 特点

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

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

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

3. 使用场景

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

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

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

需要复用映射逻辑

4. 示例
示例 1:基础字段映射
<resultMap id="userResultMap" type="com.example.model.User"><id property="id" column="user_id"/><result property="name" column="user_name"/><result property="email" column="user_email"/>
</resultMap><select id="getAllUsers" resultMap="userResultMap">SELECT user_id, user_name, user_email FROM user
</select>
示例 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 映射如下:
<resultMap id="userWithAddressResultMap" type="com.example.model.User"><id property="id" column="id"/><result property="name" column="name"/><association property="address" javaType="com.example.model.Address"><result property="city" column="city"/><result property="street" column="street"/></association>
</resultMap><select id="getUserWithAddress" resultMap="userWithAddressResultMap">SELECT u.id, u.name, a.city, a.streetFROM user uLEFT JOIN address a ON u.address_id = a.id
</select>
示例 3:一对多映射(用户与订单)
public class Order {private int orderId;private double amount;// getters and setters
}public class User {private int id;private String name;private List<Order> orders;// getters and setters
}
XML 映射如下:
<resultMap id="userWithOrdersResultMap" type="com.example.model.User"><id property="id" column="id"/><result property="name" column="name"/><collection property="orders" ofType="com.example.model.Order"><result property="orderId" column="order_id"/><result property="amount" column="amount"/></collection>
</resultMap><select id="getUserWithOrders" resultMap="userWithOrdersResultMap">SELECT u.id, u.name, o.order_id, o.amountFROM user uLEFT JOIN orders o ON u.id = o.user_id
</select>

三、resultType 与 resultMap 的对比总结

对比项

resultType

resultMap

是否需要手动配置

映射方式

自动匹配字段名

手动指定映射关系

适用场景

简单查询,字段一致

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

性能

稍快

稍慢(需解析映射关系)

可读性与可维护性

简洁易懂

更复杂,但更灵活

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

场景

推荐使用

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

resultType

返回基本类型(如 Integer、String

resultType

返回 Map 类型

resultType

字段名与 Java 属性名不一致

resultMap

包含嵌套对象或集合

resultMap

多表联查返回复杂结构

resultMap

需要复用映射逻辑

resultMap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86347.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory

该问题的原因因为配置的JAVA_HOME环境变量路径中的包括空格字符导致的错误。 一、问题排查 输出当前环境变量 $JAVA_HOME的路径地址&#xff0c;观察路径中是否存在空格 echo $JAVA_HOME二、问题解决 将JAVA_HOME路径改为你安装的jdk路径&#xff0c;注意你的版本号可能与我的会…

npm(或pnpm)时报:证书过期 certificate has expired问题

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 首先安装pnpm npm install -g pnpm //检查安装成功的版本 pnpm -v 在拉芋道管理系统&#xff0c;安装依赖pnpm i 时报证书过期 更改了镜像也一样 解决方案&#xff1a; 提示&#xff1a;这里填写该…

回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型

回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型 目录 回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 KAN作为这两年最新提出的机制&#xff0c;目前很少人用&#xff0c;很适合作为预测的创新点&…

人生笔记Real:记录生活点滴,守护珍贵记忆

在快节奏的现代生活中&#xff0c;我们常常会有一些瞬间的灵感、难忘的经历或者需要记录的重要事项。然而&#xff0c;如何高效地记录这些内容&#xff0c;并确保它们不会随着时间的流逝而丢失&#xff0c;成为了一个值得思考的问题。《人生笔记Real》正是这样一款简单好用的笔…

自动驾驶数据特征提取实战:用Python打开智能驾驶的新视角

自动驾驶数据特征提取实战:用Python打开智能驾驶的新视角 聊起自动驾驶,很多朋友第一时间想到的可能是“车上的摄像头多牛,传感器多先进”,但让我告诉你,真正决定自动驾驶“大脑”能不能跑得顺畅、跑得准的,是数据的“骨头”—特征。 没错,机器学习、深度学习的基础都…

从零搭建共享棋牌室物联网系统:硬件选型与避坑指南!

近来&#xff0c;24小时共享棋牌室凭借“低成本、无人化、高坪效”的特点成为创业热点。但许多项目在硬件选型阶段就踩坑不断——设备不兼容、安装返工、售后无门等问题频发。本文将结合实战经验&#xff0c;手把手教你从零搭建稳定可靠的棋牌室物联网硬件系统&#xff0c;并附…

NPM 依赖包版本号 `~` 和 `^` 的区别及最佳实践

本文将深入浅出地解释 ~ 与 ^ 在 package.json 中的含义&#xff0c;并结合实际开发流程给出团队协作与发布上线的最佳版本管理策略。 一、版本号的基本结构 NPM 依赖的版本号遵循 SemVer&#xff08;语义化版本&#xff09; 标准&#xff1a; 主版本号.次版本号.补丁号Major…

uniapp报错Cannot read property ‘dataset‘ of null

如果你引入的组件在uniapp分包路径中&#xff0c;就会报错

服务器常见问题以及解决方案

以下是服务器常见问题及对应的维护解决方案&#xff0c;涵盖硬件、网络、软件、安全等核心场景&#xff0c;基于最新行业实践整理&#xff1a; 一、硬件层故障‌ 硬盘失效‌ 现象‌&#xff1a;系统崩溃、IO错误、SMART告警。 解决‌&#xff1a; 立即更换故障盘&#xff0c…

企业级 Java 应用灰度发布设计方案与实践全解析

引言 在当今互联网产品快速迭代的背景下&#xff0c;如何在保证服务稳定性的同时&#xff0c;快速验证新功能的有效性&#xff0c;成为了技术团队面临的重要挑战。灰度发布&#xff08;Canary Release&#xff09;作为一种重要的发布策略&#xff0c;能够将新版本逐步推向部分用…

computed()、watch() 与 watchEffect()

下面&#xff0c;我们来系统的梳理关于 computed、watch 与 watchEffect 的基本知识点&#xff1a; 一、核心概念与响应式基础 1.1 响应式依赖关系 Vue 的响应式系统基于 依赖收集 和 触发更新 的机制&#xff1a; #mermaid-svg-twmGhASLw43mK8XM {font-family:"trebuch…

【Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述】

Linux驱动开发 ---- 4.2_平台设备&#xff08;Platform Devices&#xff09;概述 目录 Linux驱动开发 ---- 4.2_平台设备&#xff08;Platform Devices&#xff09;概述前述主要特点&#xff1a;平台设备的作用平台设备的注册与注销1. platform_device_register_simple()2. pla…

深入学习入门--(一)前备知识

一.Python基础知识 1.1 Python算数运算 1.2 变量 1.3 数据类型 1.3.1 int&#xff08;整数&#xff09; float&#xff08;浮点数&#xff09; str&#xff08;字符串&#xff09; 1.3.2 bool&#xff08;布尔值&#xff09;: 表示真或假 取值:True,False 1.3.3 list&…

iClone 中创建的面部动画导入 Daz 3D

以下是如何将 iClone 中创建的面部动画导入 Daz 3D 的简要指南。简而言之&#xff0c;您可以通过 FBX&#xff08;使用 3DXchange 或 Character Creator 的导出工具&#xff09;导出 iClone 面部动画&#xff0c;然后将其导入 Daz Studio 并将变形或骨骼重新映射到 Genesis 角色…

OceanBase向量检索在货拉拉的探索和实践

货拉拉成立于2013年&#xff0c;成长于粤港澳大湾区&#xff0c;是从事同城跨城货运、企业版物流服务、搬家、零担、跑腿、冷运、汽车租售及车后市场服务的互联网物流商城。截至2024年&#xff0c;货拉拉在全球拥有1670万月活用户和168万月活司机&#xff0c;业务覆盖全球11个市…

Flask(五) 表单处理 request.form、WTForms

文章目录 1. 基本表单处理&#xff0c;使用 request.form&#xff08;轻量&#xff09;示例一创建 HTML 表单处理表单数据 示例二HTML 表单&#xff08;login.html&#xff09;Flask 路由处理表单 2. 使用 Flask-WTF 扩展安装设置 Secret Key&#xff08;CSRF 防护&#xff09;…

c++虚继承复习

深入理解C虚继承&#xff1a;解决菱形继承问题的利器 在C面向对象编程中&#xff0c;多重继承是一个强大但容易误用的特性。今天我们来探讨一个特殊的多重继承形式——虚继承&#xff08;Virtual Inheritance&#xff09;&#xff0c;它是解决著名的"菱形继承问题"的…

魔乐社区国产算力应用创新大赛重磅开启!

当国产算力崛起成为 AI 发展新引擎&#xff0c;你是否渴望用创新方案解锁无限可能&#xff1f;魔乐社区国产算力应用创新大赛重磅来袭&#xff01;聚焦国产算力前沿&#xff0c;无论你是开发者、研究者&#xff0c;还是技术爱好者&#xff0c;都能在这里一展身手。 现在报名参…

WebView 性能调试与优化全流程:加载速度与渲染性能双提升

移动端 WebView 页面通常用于承载复杂的前端应用&#xff0c;尤其是动态加载大量数据或进行高频率交互时&#xff0c;性能问题尤为突出。用户常常会遇到页面加载缓慢、滚动卡顿、甚至是部分内容显示不完全的情况。在这种情况下&#xff0c;如何优化数据加载与渲染过程&#xff…

51c嵌入式~CAN~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/14016935 一、CAN总线常见信号干扰问题 定位干扰原因 当总线有干扰时&#xff0c;有经验的工程师能够迅速定位&#xff0c;但是对于新手来说却很麻烦。 造成总线干扰的原因有很多&#xff0c;比如通过电磁辐射耦合到通…