3.结果映射ResultMap(关联association+collection)

结果映射ResultMap

一.结果映射

是 MyBatis 中最重要最强大的元素,简化代码,允许JDBC不支持的一些操作

1.常用属性

  1. constructor - 用于在实例化类时,注入结果到构造方法中 (一般不用)

  2. idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能

  3. arg - 将被注入到构造方法的一个普通结果

  4. id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能

  5. result – 注入到字段或 JavaBean 属性的普通结果

  6. association – 一个复杂类型的关联;许多结果将包装成这种类型(1对一时)

​ 嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用

  1. collection – 一个复杂类型的集合(1对多时)

​ 嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用

  1. discriminator – 使用结果值来决定使用哪个resultMap (一般不用)

    case – 基于某些值的结果映射

    嵌套结果映射 – case 也是一个结果映射,因此具有相同的结构和元素;或者引用其它的结果映射

2.id和result的属性 - 映射普通类型

属性描述
property映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用
column数据库中的列名,或者是列的别名
javaType一个 Java 类的完全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型
jdbcTypeJDBC 类型,所支持的 JDBC 类型参见这个表格之后的“支持的 JDBC 类型”。
//id每个对象专有的标志    
//*id*元素对应的属性会被标记为对象的标识符,在比较对象实例时使用
<resultMap id="deptResultMap" type="dept">//column指定数据库字段名,property实体类中的属性名<id column="dept_id" property="deptId"/><result column="dept_name" property="deptName"/><result column="remark" property="remark"/><collection property="employees" ofType="employee"><id property="emp_id" column="emp_id"/><result property="emp_name" column="emp_name"/><result property="age" column="age"/><result property="sex" column="sex"/><result property="age" column="age"/><result property="dept_id" column="dept_id"/></collection></resultMap>
//deptResultMap与ResultMap标签中的id属性值一致,去掉resultType<select id="queryAll" resultMap="deptResultMap" resultType="emoloyees">select d.dept_id,dept_name,remark,emp_id,emp_name,age,sex,e.dept_idfrom dept dright join employee e on d.dept_id = e.dept_id</select>

当数据库列名和实体类属性名不能匹配上, 使用给变量赋值,就不用在sql语句中给字段名起别名,显示指定ResultMap来完成匹配功能

3.关联association

关联映射的是一个对象

1)分类:

MyBatis 有两种不同的方式加载关联:

  • 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。
  • 嵌套结果映射:使用嵌套的结果映射来处理连接结果的重复子集。
2)常用属性
属性描述
property映射到列结果的字段或属性。如果用来匹配的 JavaBean存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。
javaType一个 Java 类的完全限定名,或一个类型别名。如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。
column数据库中的列名,或者是列的别名,如果需要嵌套查询,用来传参,一般和select一起用
select嵌套查询时传select的ID,它会从 column属性指定的列中检索数据,作为参数传递给目标 select 语句。
resultMap结果映射的 ID
4.集合 - collection

集合映射是一个集合,(1对多)

  • 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。
  • 嵌套结果映射:使用嵌套的结果映射来处理连接结果的重复子集。
1)常用属性
属性描述
property映射到列结果的字段或属性。
javaType用来匹配查询结果对应的java类型。一般都是ArrayList
column数据库中的列名,或者是列的别名,如果需要嵌套查询,用来传参,一般和select一起用,随便写个aa也可以
select嵌套查询时传select的ID,它会从 column属性指定的列中检索数据,作为参数传递给目标 select 语句。
resultMap结果映射的 ID
ofType映射集合的泛型,即集合里面存放的对象类型
        <collection property="employees" ofType="employee"><id property="emp_id" column="emp_id"/><result property="emp_name" column="emp_name"/><result property="age" column="age"/><result property="sex" column="sex"/><result property="age" column="age"/><result property="dept_id" column="dept_id"/></collection>

4.关联的分类

1)单向关联(一对1)

单向关联表示关系只在一个方向上存在,其中一个表可以关联到另一个表,但反过来不行。在单向关联中,只有一个表的对象包含了关联对象的引用,而关联对象本身不包含对关联表的引用。

单向关联的配置在MyBatis中非常简单,只需要在<resultMap>中使用<collection>或<association>标签来定义关联即可。

2)双向关联(一对多)

双向关联表示关系在两个表之间是相互关联的,每个表的对象都包含了对另一个表的引用。这样,我们可以通过一个表的对象访问到关联表的对象,也可以通过关联表的对象访问到原始表的对象

双向关联的配置相对复杂一些,需要在<resultMap>中使用<collection>或<association>标签来定义关联,并在关联对象中使用<association>标签来定义反向关联。

需要注意的是,无论是单向关联还是双向关联,都需要在MyBatis的映射文件中进行配置。关联的方向取决于我们在配置时定义的关联属性和关联对象的引用。

总结来说,MyBatis中的关系关联可以是单向关联或双向关联。单向关联表示关系只在一个方向上存在,而双向关联表示关系在两个表之间是相互关联的。在配置关系关联时,我们需要定义关联属性和关联对象的引用,以确定关联的方向。

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

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

相关文章

Day65 代码随想录打卡|回溯算法篇---组合总和II

题目&#xff08;leecode T40&#xff09;&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含…

Linux文件编程(打开/创建写入读取移动光标)

目录 一、如何在Linux下做开发 1.vi编辑器 2.gcc编译工具 3.常用指令 二、文件打开及创建 三、写入文件 四、读取文件 五、文件“光标”位置 一、如何在Linux下做开发 所谓文件编程&#xff0c;就是对文件进行操作&#xff0c;Linux的文件和Windows系统的文件大差不差…

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数&#xff0c;函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…

剑指offer,打印从1到最大的n位数

这道题重点考察的就是我们的大数打印&#xff0c;因为如果按照普通的整形去循环打印的话&#xff0c;碰见n10的情况下就会超出整形的范围了&#xff0c;所以我们使用字符串进行打印&#xff0c;确切的说是使用字符进行打印&#xff0c;代码如下所示&#xff1a; public static…

EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析

EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析 0 预览一 该文件功能`fmmu_config.c` 文件功能函数预览二 函数功能介绍1. `ec_fmmu_config_init`2. `ec_fmmu_set_domain_offset_size`3. `ec_fmmu_config_page`示例用法示例详细说明三 h文件翻译四 c文件翻译该文档修改…

数据库sql语句中exists关键字的用法及原理

一、EXISTS关键字是做什么的&#xff1f; EXISTS是SQL语句中的一个关键字&#xff0c;用于判断一个子查询是否返回了任何行。如果子查询返回的结果集非空&#xff0c;EXISTS返回TRUE&#xff0c;否则返回FALSE。 二、EXISTS的基本语法示例&#xff1a; SELECT column1, colu…

氛围感视频素材高级感的去哪里找啊?带氛围感的素材网站库分享

亲爱的创作者们&#xff0c;大家好&#xff01;今天我们来聊聊视频创作中至关重要的一点——氛围感。一个好的视频&#xff0c;不仅要有视觉冲击力&#xff0c;还要能够触动观众的情感。那我们应该去哪里寻找这些充满氛围感且高级的视频素材呢&#xff1f;别急&#xff0c;我这…

打开IDEA,程序员思考的永远只有两件事!!!

微信公众号&#xff1a;牛奶 Yoka 的小屋 有任何问题。欢迎来撩~ 最近更新&#xff1a;2024/07/09 [大家好&#xff0c;我是牛奶。] 当年面试时背了很多八股文&#xff0c;但在日渐重复的机械工作中&#xff08;产品业务开发&#xff09;&#xff0c;计算机网络、操作系统、算…

混合贪心算法求解地铁线路调度

一、问题描述 城市轨道交通的繁荣发展&#xff0c;带来了车辆资源需求的日益增加。如何兼顾运营服务水平和运营成本&#xff0c;以最少的车底优质地完成运输任务成为一大严峻问题。本题在后续的描述中将由多辆动车和拖车组合而成的车组称为车底。在日常的运营组织中&#xff0…

【文档智能】LACE:帮你自动生成文档布局的方法浅尝

前言 往期很多文章都介绍了【文档智能】上布局识别&#xff08;版式分析&#xff09;的技术思路&#xff0c;版式分析是通过对文档版式进行布局识别&#xff0c;识别文档中的元素类型的过程。这次来看看一个有趣的思路&#xff0c;通过已有的元素类型&#xff0c;来生成可控的…

赠你一只金色的眼 - 富集分析和表达数据可视化

GOplot包介绍 GOplot包用于生物数据的可视化。更确切地说&#xff0c;该包将表达数据与功能分析的结果整合并进行可视化。但是要注意该包不能用于执行这些分析&#xff0c;只能把分析结果进行可视化。在所有科学领域&#xff0c;由于空间限制和结果所需的简洁性&#xff0c;切…

Agent如何帮助大模型“增强记忆”?

Agent如何帮助大模型“增强记忆”&#xff1f; 原创 格林 神州问学 2024年07月08日 17:50 日本 记忆反馈 >规划&#xff1f; 来源|神州问学 引言 去年6月份&#xff0c;Lilian发布了关于LLM驱动的Agent的结构和组件&#xff0c;其中包括规划、行动、工具还有记忆&#xff…

带有子节点的树状表的父节点拖动排序#Vue3#Sortable插件

带有子节点的树状表的父节点拖动排序#Vue3#Sortable插件 使用Sortable插件这里要保证获取到的是父节点的下标&#xff0c;属性newDraggableIndex获取到的就是只有父节点的下标。设置子节点不能被拖动&#xff0c;最后在逐个调用接口进行数据库中顺序的更新。 <template>…

4.10-7.9

4.14 System.getCurrentMills(); fis.read()和fis.read(bytes)。一个是一次读取一个字节&#xff0c;一个是一次读取一个字节数组个字节。返回值一个是读取到的字符的ascii表示&#xff08;数字&#xff09;,一个是返回读取到的字节数。读取到最后都是返回-1。read(bytes)会把…

【Python】已解决:SyntaxError: invalid character in identifier

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError: invalid character in identifier 一、分析问题背景 在Python编程中&#xff0c;SyntaxError: invalid character in identifier是一个常见的编译…

面经-计算机网络-数据结构-堆

1.什么是堆 堆是一种满足以下条件的树&#xff1a; 堆中的每一个节点值都大于等于&#xff08;或小于等于&#xff09;子树中所有节点的值。或者说&#xff0c;任意一个节点的值都大于等于&#xff08;或小于等于&#xff09;所有子节点的值。 2.堆的用途 当我们只关心所有数…

tk Text文本框赋值,清空

import tkinter as tk# 创建主窗口 root tk.Tk() root.title("文本框内容赋值示例")# 创建一个Text小部件 text_area tk.Text(root, height10, width50) text_area.pack()# 将内容赋值给Text小部件 text_area.insert(tk.END, "这是文本框中的内容。\n")#…

android CameraX构建相机拍照

Android CameraX 是一个 Jetpack 支持库&#xff0c;旨在简化相机应用的开发工作。它提供了一致且易用的API接口&#xff0c;适用于大多数Android设备&#xff0c;并可向后兼容至Android 5.0&#xff08;API级别21&#xff09;。 CameraX解决了在多种设备上实现相机功能时所遇…

26.5 Django模板层

1. 模版介绍 在Django中, 模板(Templates)主要用于动态地生成HTML页面. 当需要基于某些数据(如用户信息, 数据库查询结果等)来动态地渲染HTML页面时, 就会使用到模板.以下是模板在Django中使用的几个关键场景: * 1. 动态内容生成: 当需要根据数据库中的数据或其他动态数据来生…

linux使用chattr与lsattr设置文件/目录防串改

背景 linux服务器下,防止某个文件/目录被串改(增删改),可以使用chattr与lsattr设置,这是一种保护机制,用于防止意外地修改或删除重要的文件内容。 chattr与lsattr使用 1.设置目录 图中/tmp/zhk,设置目录属性文件可能被设置为不可更改(immutable)或者只追加(append …