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:懒羊羊

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【太原理工大学】软件系统安全—分析题

OK了&#xff0c;又是毫无准备的一场仗&#xff0c;我真是ありがとうございます 凸^o^凸 根据前几年传下来的信息&#xff0c;所谓“分析”&#xff0c;就是让你根据情节自行设计&#xff0c;例如如何设计表单等&#xff0c;这类多从实验中出&#xff0c;王老师强调好好做实验一…

自然抽样和平顶抽样

自然抽样和平顶抽样是两种信号处理和采样技术&#xff0c;它们在音频信号处理、信号重建以及数字信号处理中有着不同的应用。 1. 自然抽样&#xff08;也称为理想抽样或无失真抽样&#xff09;&#xff1a;样值脉冲的幅度随原始信号m(t)的幅度而变&#xff1b; 自然抽样过程的…

个人网站制作 Part 26 添加在线日历功能 | Web开发项目添加页面缓存

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加在线日历功能&#x1f528;使用日历服务&#x1f527;步骤 1: 选择日历服务&#x1f527;步骤 2: 安装FullCalendar&#x1f527;步骤 3: 创建FullCalendar组件&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 生成哈夫曼树(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 生成哈夫曼树(100分) 🌍 评测功能需要订阅专栏后私信联系清…

数据中心布线管理:预标记线缆与移动扫描技术的融合

随着信息技术的飞速发展&#xff0c;数据中心布线管理面临着前所未有的挑战。传统的布线管理方式已无法满足现代数据中心高效、准确和可靠的需求。在这样一个背景下&#xff0c;预标记线缆与移动扫描技术的结合&#xff0c;为数据中心布线管理带来了革命性的解决方案。 布线管理…

基于System-Verilog点亮LED灯

文章目录 一、System-Verilog介绍1.1System-Verilog 二、简单的语法介绍2.1接口实例2.2全局声明和语句实例2.3时间单位和精度2.4用户定义的类型2.5 枚举类型 三、流水灯参考 一、System-Verilog介绍 1.1System-Verilog SystemVerilog是一种硬件描述和验证语言&#xff08;HDV…

stm32f103 HAL库 HC-SR04测距

目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 配置时钟 配置定时器…

八、BGP

目录 一、为何需要BGP&#xff1f; 二、BGP 2.1、BGP邻居 2.2、BGP报文 2.3、BGP路由 2.4、BGP通告遵循原则 2.5、BGP实验 第一步&#xff1a;建立邻居 第二步&#xff1a;引入路由 BGP路由黑洞 路由黑洞解决方案 1、IBGP全互联 2、路由引入 3、MPLS 多协…

【Python】数据处理:Matplotlib绘图

Matplotlib是Python强大的数据可视化工具库&#xff0c;类似于MATLAB语言。Mat-lotlib提供了一整套与MATLAB相似的命令API&#xff0c;十分适合进行交互式制图&#xff0c;而且也可以方便地将它作为绘图控件&#xff0c;嵌入GUI应用程序中。 Matplotlib是神经生物学家John D.Hu…

轻松拿捏C语言——【关机代码】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 我们可以通过写…

c++编程(16)——STL(4)deque

欢迎来到博主的专栏&#xff1a;c编程 博主ID&#xff1a;代码小豪 文章目录 dequedeque的优劣势deque的操作constructor元素访问 deque deque的全称是double ended queue&#xff0c;译为双端队列&#xff0c;如何理解这个双端呢&#xff1f;我们以vector为例&#xff0c;vec…

深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素

在当今这个日新月异的商业时代&#xff0c;企业的成功不再仅仅取决于资金、技术或市场策略&#xff0c;而更多地依赖于企业所拥有的人才资源。有效的人才管理策略&#xff0c;尤其是“选、用、育、留”四大核心要素&#xff0c;已成为推动企业持续发展的关键。 一、选&#xff…

Canvas绘制老友记时钟

Canvas绘制老友记时钟 前言 一直做3D/2D可视化&#xff0c;Canvas API和三角函数&#xff0c;空间几何是基础。在官网上看了一遍Canvas API之后&#xff0c;决定绘制一个老友记时钟来巩固知识点&#xff0c;本文用实际代码讲解绘制过程。 代码 HTML <canvas id"myC…

electron模板【lectron-react-boilerplate】多窗口配置【HtmlWebpackPlugin】多页面配置

如果您正在使用electron-react-boilerplate进行快速的Electron应用程序开发,您可能会遇到想要在桌面应用程序中拥有多个原生窗口的情况。 MacOS窗口图像由OpenClipart-Vectors提供,来源Pixabay。 开始之前需要提及的事情! Electron有一个主进程和渲染进程的模式。可以有多个…

【MySQL】聊聊数据库是如何保证数据不丢的

对于一个存储系统来说&#xff0c;其中比较关键的核心组件包含&#xff0c;网络、存储模型、持久化、数据结构等。而数据如何保证不丢失&#xff0c;对于不同的存储系统来说&#xff0c;比如Redis采用AOF和RDB的方式进行混合使用&#xff0c;而MySQL采用日志进行保证。也就是re…

【C++11】第一部分(一万六千多字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 C11简介 统一的列表初始化 &#xff5b;&#xff5d;初始化 std::initializer_list 声明 auto decltype 右值引用和移动语义 左值引用和右值引用 左值引…

车票信息的请求与显示

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 发送与分析车票信息的查询请求 得到了获取车票信息的网络请求地址&#xff0c;然后又分析出请求地址的必要参数以及车站名称转换的文件&#xff…

利用鱼骨图进行项目问题复盘与改进

一、引言 在项目管理中&#xff0c;问题复盘是一个至关重要的环节。它不仅能帮助我们识别项目执行过程中出现的问题&#xff0c;还能促使我们深入探究问题的根本原因&#xff0c;从而采取有效的改进措施。在这个过程中&#xff0c;鱼骨图作为一种强大的工具&#xff0c;为我们…

GiantPandaCV | 提升分类模型acc(三):优化调参

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;提升分类模型acc(三)&#xff1a;优化调参 一、前言 这是本系列的第三篇文章&#xff0c;前两篇GiantPandaCV | 提升分类模型acc(一)&#xff1a;B…

一文讲通:前后端分离的四种开发模式,及其优缺点。

前后端分离已经成为了开发的主流模式&#xff0c;很多老铁认为前后端分离就是各干各的&#xff0c;其实不然。 前后端分离有多种模式&#xff0c;贝格前端工场为大家一一详解。 1. 前后端完全分离 在这种模式下&#xff0c;前端和后端是完全独立的两个系统。前端使用一种框架…