Mybatis框架中结果映射resultMap标签方法属性收录

Mybatis框架中结果映射resultMap标签收录

在MyBatis框架中,resultMap 是一种强大的机制,用于将数据库结果集映射到Java对象上。它允许你定义如何将查询结果中的列映射到Java对象的属性上,尤其是当数据库表的字段名与Java对象的属性名不一致时,或者需要进行复杂的映射(如一对一、一对多关系)时,resultMap 就显得尤为重要。

1. 基本结构

一个基本的resultMap定义如下:

<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="username" column="user_name"/><result property="password" column="user_password"/>
</resultMap>

在这个例子中:

  • id 属性定义了resultMap的唯一标识符。
  • type 属性指定了映射到的Java类型。
  • idresult 元素用于定义主键和普通属性的映射。
  • property 属性是Java对象的属性名。
  • column 属性是数据库表的列名。

2. 方法使用

select语句中使用resultMap

<select id="selectUserById" resultMap="userResultMap">SELECT user_id, user_name, user_password FROM users WHERE user_id = #{id}
</select>

在这个select语句中,resultMap属性引用之前定义的userResultMap

3. 高级映射

resultMap 还支持更复杂的映射,如关联(association)、集合(collection)、鉴别器(discriminator)等。

关联(Association)

用于一对一关系的映射:

<resultMap id="orderResultMap" type="Order"><id property="id" column="order_id"/><result property="orderNumber" column="order_number"/><association property="user" javaType="User"><id property="id" column="user_id"/><result property="username" column="user_name"/></association>
</resultMap>
集合(Collection)

用于一对多关系的映射:

<resultMap id="userResultMapWithOrders" type="User"><id property="id" column="user_id"/><result property="username" column="user_name"/><collection property="orders" ofType="Order"><id property="id" column="order_id"/><result property="orderNumber" column="order_number"/></collection>
</resultMap>

4. 方法总结

回顾概念
  • ID:在resultMap中,可以为每个映射指定一个唯一的ID,以便于引用。
  • Result:基本的结果映射,可以指定列名和对象属性名之间的映射关系。
  • Association:用于处理一对一的关系映射。例如,一个订单(Order)对象关联一个用户(User)对象。
  • Collection:用于处理一对多的关系映射。例如,一个用户(User)对象关联多个订单(Order)对象。
  • Discriminator:用于处理类的继承关系映射,根据数据库中的某个字段值来决定实例化哪个子类。

resultMap 是MyBatis中用于处理复杂数据映射的关键特性。通过定义resultMap,可以灵活地将数据库中的数据映射到Java对象上,处理不同命名规则、复杂关系等问题。正确使用resultMap可以大大提高数据访问层的灵活性和可维护性。

image-20240614100908507

示例演示

假设有一个用户表(users)和一个订单表(orders),用户表中有用户ID(user_id)、用户名(username),订单表中有订单ID(order_id)、用户ID(user_id, 作为外键)和订单详情(details)。

本示例过程中我们要实现从订单表查询订单的同时,也获取到该订单对应的用户信息。

首先,在MyBatis的映射文件中定义一个resultMap:

1<resultMap id="OrderResultMap" type="com.example.Order">
2    <id property="orderId" column="order_id"/>
3    <result property="details" column="details"/>
4    
5    <!-- Association映射,用来处理一对一关系 -->
6    <association property="user" javaType="com.example.User">
7        <id property="userId" column="user_id"/>
8        <result property="username" column="username"/>
9    </association>
10</resultMap>

然后,在查询语句中引用这个resultMap:

1<select id="selectOrderWithUser" resultMap="OrderResultMap">
2    SELECT o.order_id, o.details, u.user_id, u.username
3    FROM orders o
4    LEFT JOIN users u ON o.user_id = u.user_id
5</select>

这样,当执行这个查询时,MyBatis会自动根据OrderResultMap中定义的映射规则,将查询结果转换成Order对象,并且正确地将关联的用户信息填充到Order对象的user属性中。

了解更多知识请戳下:

@Author:懒羊羊

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

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

相关文章

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

TCP与UDP案例

udp不会做拆分整合什么的 多大就是多大

【Spine学习08】之短飘,人物头发动效制作思路

上一节说完了跑步的&#xff0c; 这节说头发发型。 基础过程总结&#xff1a; 1.创建骨骼&#xff08;头发需要在上方加一个总骨骼&#xff09; 2.创建网格&#xff08;并绑定黄线&#xff09; 3.绑定权重&#xff08;发根位置的顶点赋予更多总骨骼的权重&#xff09; 4.切换到…

Orange_Pi_AIpro运行蜂鸟RISC-V仿真

Orange_Pi_AIpro运行蜂鸟RISC-V仿真 突发奇想&#xff0c;试一试Orange Pi AIpro上运行蜂鸟RISC-V的仿真。 准备 默认已经有一个Orange Pi AIpro&#xff0c;并且对设备进行一定的初始化配置&#xff0c;可以参考上一篇博文开源硬件初识——Orange Pi AIpro&#xff08;8T&a…

FineReport简单介绍

一、介绍 官网 &#xff1a;FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 报表是以表格、图表的形式来动态展示数据&#xff0c;企业通过报表进行数据分析&#xff0c;进而用于辅助经营管理决策。 FineReport 是一款用于报表制作&#xff0c;分析和…

短视频矩阵系统源码搭建--如何基于各平台原生态坏境做开发

短视频矩阵系统源码搭建是一个涉及多个技术层面的复杂过程&#xff0c;它要求开发者能够理解并利用不同平台的原生环境来开发和部署应用程序。以下是一些基于不同平台原生环境开发短视频矩阵系统的一般步骤和考虑因素&#xff1a; 1.需求分析&#xff1a;首先明确系统需要实现的…

抽奖系统源码_微信抽奖系统PHP源码开源

介绍&#xff1a; 微信抽奖系统源码是一个以php MySQL进行开发的手机抽奖系统源码。用途&#xff1a;适合做推广营销、直播、粉丝抽奖。 功能介绍&#xff1a; 1、后台可以设置每个抽奖用户的抽奖次数,后台添加设置奖品,适和企业和商场搞活动,后台添加用户&#xff0c;才能抽…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题&#xff1a;Rocky Linux 9.4 升级实录&#xff0c;及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布&#xff0c;本文记录了从 RL 9.3 升级到 9.4 的过程&#xff0c;以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容&#xff0c;请戳&…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上&#xff0c;基于TCP/IP协议工作&#xff0c;对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面&#xff0c;使得管理员可以使用统一的操作进行管理&#xff0c;而不必理会设…

个人网站制作 Part 25 添加实时聊天功能 | Web开发项目添加页面缓存

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加实时聊天功能&#x1f528;使用聊天服务&#x1f527;步骤 1: 选择聊天服务&#x1f527;步骤 2: 安装Socket.io&#x1f527;步骤 3: 创建Socket.io服务器 &#x1…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer&#xff0c;官方提供了一些教程&#xff0c;本人希望能够断点调试&#xff0c;以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…

【漏洞复现】英飞达医学影像存档与通信系统 Upload.asmx 任意文件上传漏洞

0x01 产品简介 英飞达 医学影像存档与通信系统 Picture Archiving and Communication System&#xff0c;它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像(包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各种红外…

适配不同数据库厂商方案

背景 在对国产化数据有要求的时候&#xff0c;我们会做对 达梦、海量等数据库的配置。 有些SQL 以前没有写成标准SQL&#xff1b; 那么适配的时候怎么办呢&#xff1f;改成标准SQL。 如果不好改呢&#xff1f;比如SQL比较复杂等&#xff0c;需要判断 当前是哪个厂商的数据库…

2024全球边缘计算大会参会企业名单(首批)

6月22日&#xff0c;第九届全球边缘计算大会将在深圳南山区科兴科学园举办&#xff0c;本次大会由边缘计算社区主办&#xff0c;并得到了EMQ、研华科技、网宿科技等单位的大力支持&#xff01;大会邀请了20重磅嘉宾&#xff0c;聚焦边缘计算前沿技术方向和热点趋势。 以下为首批…

HO-VMD-TCN:西储大学轴承故障诊断全流程详解

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理详解 1.数据预处理 2.特征提取 3.故障…

DomoAI让你轻松变身视频达人!支持20s完整视频生成!

账号注册 官网&#xff1a;https://www.domoai.app/zh-Hant/library 功能 支持不同风格的视频类型&#xff0c;支持图片转视频&#xff0c;支持文字转图片&#xff0c;支持静态图片变为动态。 可以切换语言为中文 风格转换 选择不同风格的 支持生成20s&#xff0c;目前接触…

数据预处理 #数据挖掘 #python

数据分析中的预处理步骤是数据分析流程中的重要环节&#xff0c;它的目的是清洗、转换和整理原始数据&#xff0c;以便后续的分析能够准确、有效。预处理通常包括以下几个关键步骤&#xff1a; 数据收集&#xff1a;确定数据来源&#xff0c;可能是数据库、文件、API或网络抓取…

Zabbix Centos8 安装笔记

Zabbix 安装笔记 安装环境 Centos 8 正常发行版 安装版本 Zabbix 7 (LTS) 安装步骤 1、关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/c…

【C#】开发过程中记录问题

1.DateTimePicker控件获取时间 拖动控件&#xff0c;设置属性format为custom格式。例如我想获得20240101这种类型的string类型的数据&#xff1a; string DateTime DateTimePicker.Value.ToString("yyyyMMdd");2.ComboBox下拉列表控件 默认为DropDown&#xff0c;…

【Apache Doris】周FAQ集锦:第 6 期

【Apache Doris】周FAQ集锦&#xff1a;第 6 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…