MyBatis之关联查询

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
MyBatis之关联查询


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、一对一关联查询
  • 二、一对多关联查询
  • 三、多对多关联查询
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

在使用MyBatis进行数据库操作时,关联查询是一种重要的查询方式。它能够在一个查询中同时检索多个表中的数据,从而提高查询效率和性能。在开始学习和使用MyBatis的关联查询之前,我们需要先了解一些基础概念和知识,包括数据库表、实体类、Mapper接口和Mapper.xml文件等。
在接下来的博客文章中,我们将逐步学习如何使用MyBatis进行关联查询,并通过示例代码演示如何实现多对一和一对多的关联查询。希望通过这些介绍,你能够掌握MyBatis关联查询的基本知识和技能,并能够在实际项目中应用这些知识。


提示:以下是本篇文章正文内容,下面案例可供参考

一、一对一关联查询

在 MyBatis 中,一对一关联查询是指通过在查询语句中使用连接(JOIN)操作,从多个表中获取相关联的数据。这样可以一次性获取到涉及多个表的数据,避免了多次查询和手动关联的麻烦。
一对一关联查询通常涉及到两个表,其中一个表包含主要数据,称为“主表”,另一个表包含与主表关联的数据,称为“从表”。在关联查询中,通过在主表和从表之间建立连接条件,可以将相关的数据关联起来。
在 MyBatis 的映射文件中,可以使用标签来配置一对一关联查询。以下是一个简单的示例:

<resultMap id="studentMapper" type="com.zhangsan.pojo.Student"><!-- 主键列 --><id property="sid" column="sid"></id><!-- 普通列 --><result property="name" column="name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><!-- 一对一对象列 property:属性名  column:关联列名 javaType:对象类型--><association property="classes" column="classId" javaType="com.zhangsan.pojo.Classes"><!-- 关联对象主键列 --><id property="cid" column="cid"></id><!-- 关联对象普通列 --><result property="className" column="className"></result></association>
</resultMap>
<!-- 多表查询,级联查询学生和其班级 -->
<select id="findAll" resultMap="studentMapper">select * from student left join classes on student.classId = classes.cid;
</select>

二、一对多关联查询

在 MyBatis 中,一对多关联查询是指通过在查询语句中使用连接(JOIN)操作,从一个表中查询出与之关联的多个表的数据。
一对多关联查询通常涉及到两个表,其中一个表包含主键,另一个表包含外键,并且外键与主键之间存在关联关系。例如,一个学生表(student)和一个成绩表(score)之间存在一对多的关联关系,学生表中的主键是学生 ID(student_id),成绩表中的外键是学生 ID(student_id),并且每个学生可能有多个成绩记录。
以下是一个示例,展示了如何在 MyBatis 中使用一对多关联查询:假设有一个学生表(student)和一个成绩表(score),学生表包含学生 ID(student_id)和学生姓名(student_name),成绩表包含学生 ID(student_id)和成绩(score)。
1.在学生表的映射文件中定义一个关联的结果集映射,用于获取学生的成绩:

<!-- 学生表的映射文件 -->
<mapper namespace="com.example.studentMapper"><resultMap id="studentWithScore" type="com.example.Student"><id column="student_id" property="studentId" /><result column="student_name" property="studentName" /><collection property="scores" ofType="com.example.Score"><id column="student_id" property="studentId" /><result column="score" property="score" /></collection></resultMap><select id="selectStudentWithScore" parameterType="int" resultMap="studentWithScore">SELECT s.student_id, s.student_name, sc.scoreFROM student sINNER JOIN score sc ON s.student_id = sc.student_idWHERE s.student_id = #{studentId}</select>
</mapper>

2.在使用 MyBatis 进行查询时,可以使用关联的结果集映射来获取关联的数据:

// 学生表的实体类
class Student {private Integer studentId;private String studentName;private List<Score> scores;// getter 和 setter 方法
}// 成绩表的实体类
class Score {private Integer scoreId;private Integer studentId;private Integer score;// getter 和 setter 方法
}public class Main {public static void main(String[] args) {// 创建学生表的 Mapper 对象StudentMapper studentMapper = new StudentMapper();// 创建成绩表的 Mapper 对象ScoreMapper scoreMapper = new ScoreMapper();// 输入学生 IDint studentId = 1;// 使用 MyBatis 查询学生及其成绩Student student = studentMapper.selectStudentWithScore(studentId);// 输出学生信息和成绩System.out.println("Student: " + student);}
}

上述示例中,通过在学生表的映射文件中定义了一个关联的结果集映射studentWithScore,将学生表和成绩表关联起来。然后,在成绩表的映射文件中,添加了对关联结果集映射的引用,并在使用时通过标签进行关联。
在查询学生信息时,使用了studentMapper.selectStudentWithScore(studentId)方法,该方法将返回一个包含学生信息和成绩的Student对象。通过该对象可以获取学生的信息和关联的成绩。

三、多对多关联查询

多对多关联查询通常涉及到三个或更多的表,其中至少有两个表之间存在多对多的关联关系。以下是一个示例,展示了如何在 MyBatis 中使用多对多关联查询:
MyBatis多对多关联查询本质就是两个一对多关联查询。例如有老师类和班级类:一个老师对应多个班级,也就是老师类中有一个班级集合属性。一个班级对应多个老师,也就是班级类中有一个老师集合属性。现在通过一个示例,将查询班级的时候,把同学和老师都查出来:

<resultMap id="classesMapper" type="com.zhangsan.pojo.Classes"><id property="cid" column="cid"></id><result property="className" column="className"></result><!-- 集合列  property:属性名  column:关联列名 ofType:集合的泛型 --><collection property="studentList" column="classId" ofType="com.zhangsan.pojo.Student"><id property="sid" column="sid"></id><result property="name" column="name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result></collection><collection property="teacherList" column="cid" ofType="com.zhangsan.pojo.Teacher"><id property="tid" column="tid"></id><result property="tname" column="tname"></result></collection>
</resultMap><select id="findAll" resultMap="classesMapper">select *from classesleft join studenton classes.cid = student.classIdleft join classes_teacheron classes.cid = classes_teacher.cidleft join teacheron classes_teacher.tid = teacher.tid;
</select>

总结

提示:这里对文章进行总结:

关联查询是 MyBatis 中一种常见的查询方式,它通过在映射文件中使用JOIN语句和结果集映射来实现。在使用关联查询时,需要注意表之间的关联关系、结果集映射的配置以及查询语句的编写。通过合理使用关联查询,可以方便地获取相关联的数据,提高查询效率和数据的完整性。

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

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

相关文章

javafx

JavaFX JavaFX简介 JavaFX是一个用于创建富客户端应用程序的图形用户界面&#xff08;GUI&#xff09;框架。它是Java平台的一部分&#xff0c;从Java 8开始成为Java的标准库。 JavaFX提供了丰富的图形和多媒体功能&#xff0c;使开发人员能够创建具有吸引力和交互性的应用程…

simulink代码生成(九)—— 串口显示数据(纸飞机联合调试)

纸飞机里面的协议是固定的&#xff0c;必须按照协议配置&#xff1b; &#xff08;1&#xff09;使用EasyHEX协议&#xff0c;测试int16数据类型 测试串口发出的数据是否符合&#xff1f; 串口接收数据为&#xff1a; 打开纸飞机绘图侧&#xff1a; &#xff08;1&#xff09…

机器学习(三) -- 特征工程(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 未完待续…… 目录 系列文章目录 前言 三、特征…

精准掌控 Git 忽略规则:定制化 .gitignore 指南

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃诸葛妙计&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &…

前端中级算法题

前端中级算法题 反转字符串 编写一个函数&#xff0c;接受一个字符串作为输入&#xff0c;并返回反转后的字符串。 示例&#xff1a; function reverseString(str) {return str.split().reverse().join(); }reverseString(hello); // 输出: olleh 找出数组中的最大值 编写一个函…

统信UOS操作系统上扩容数据盘

原文链接&#xff1a;统信UOS操作系统上扩容数据盘 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在统信UOS操作系统上扩容数据盘的方法。在使用UOS的过程中&#xff0c;随着数据的不断增加&#xff0c;原有磁盘空间可能会变得不足&#xff0c;这时候就需要对数…

【2024年必看】私域裂变的10大秘籍,让你轻松玩转市场!

在私域时代&#xff0c;企业需要不断地寻找新的用户来扩大自己的用户群体。然而&#xff0c;随着获客成本的逐渐升高&#xff0c;传统的广告宣传和推广方式已经不再是最优选择。因此&#xff0c;“老带新”的裂变策略成为了企业拉新的首选。 通过给予老用户奖励&#xff0c;刺…

汽车标定技术(十四)--标定数据固化方法简介

目录 1.标定数据固化方法 1.1 基于XCP固化 1.2 基于UDS固化 2. 具体实现形式 2.1 CAN

到底是1K=1024还是1K=1000呢?

问题 举例&#xff1a;15GB的数据块的大小是15*2的30次方*8bit&#xff1b;而10Gbit/s的传输速率是10*10的9次方bit/s 那么问题来了&#xff1a;这个G到底是2的30次方还是10的9次方呢&#xff1f;&#xff1f;&#xff1f; 理解 由于在计算机内部采用的是二进制&#xff…

分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测

分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测&#xff08;完整…

第十三章 创建Callout Library - 兼容的语言和编译器

文章目录 第十三章 创建Callout Library - 兼容的语言和编译器兼容的语言和编译器标注库 Runup 和 Rundown 函数 第十三章 创建Callout Library - 兼容的语言和编译器 兼容的语言和编译器 使用 $ZF Callout Interface&#xff0c;可以用外部语言编写函数并从 ObjectScript 调…

html引入react以及hook的使用

html引入react 效果代码注意 效果 分享react demo片段的时候&#xff0c;如果是整个工程项目就有点太麻烦了&#xff0c;打开速度慢&#xff0c;文件多且没必要&#xff0c;这个时候用html就很方便。 在html中能正常使用useState 和 useEffect 等hook。 代码 <!DOCTYPE htm…

2024三掌柜赠书活动第一期:TVM编译器原理与实践

目录 前言TVM编译器的实现过程关于《TVM编译器原理与实践》编辑推荐内容简介作者简介图书目录书中前言/序言《TVM编译器原理与实践》全书速览结束语 前言 随着人工智能的发展&#xff0c;计算机视觉、自然语言处理和语音识别等领域的需求不断增加。为了更好地满足这些需求&am…

【Web】CTFSHOW元旦水友赛部分wp

目录 ①easy_include ②easy_web ③easy_login web一共5题&#xff0c;我出了3题&#xff0c;巧的是好像师傅们也只出了3题&#xff0c;跨年拿旗还是很快乐的&#xff0c;下面直接贴出自己的wp. ①easy_include pearcmd不解释 这里主要是 &#xff0c;file://协议支持以fi…

xdoj综合,数字分解排序,文件排序,股票

数字分解排序 问题描述 输入一个9位以内的正整数n&#xff0c;按数值从高到低的顺序输出n的各位数字。 输入说明 一个正整数n(0<n<1000000000) 输出说明 按数值从高到低的顺序输出n的各位数字&#xff0c;数字之间用空格隔开 输入样例 564391 输出样例 …

BIOMOD2提供运行多达10余种物种分布模拟模型

随着生物多样性全球大会的举办&#xff0c;不论是管理机构及科研单位、高校都在积极准备&#xff0c;根据国家林草局最新工作指示&#xff0c;我国将积极整合、优化自然保护地&#xff0c;加快推进国家公园体制试点&#xff0c;构建以国家公园为主体的自然保护地体系。针对我国…

Text visualization : pipeline,wordle,phrase net,word tree

Text visualization&#xff08;文本可视化&#xff09;是一种将文本数据转换为可视形式的技术&#xff0c;以便更好地理解和分析文本内容。以下是可能会涉及的几个知识点&#xff1a; 1. Pipeline&#xff08;流程图&#xff09;&#xff1a;Pipeline是指将文本可视化的过程划…

网络安全B模块(笔记详解)- 数字取证

数据分析数字取证-attack 1.使用Wireshark查看并分析Windows 7桌面下的attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户的IP地址,并将恶意用户的IP地址作为Flag(形式:[IP地址])提交; 解析:http.request.method==POST ​ Flag:[172.16.1.102] 2.继续…

SM2——适用于前后端(java+vue)公用的SM2国密加解密传输

目录 一、SM2国密加解密算法1.1、pom文件引入依赖包1.2、SM2加解密工具类1.3、测试类 一、SM2国密加解密算法 1.1、pom文件引入依赖包 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>…

Maple2023安装包下载及安装教程

Maple 2023下载链接&#xff1a;https://docs.qq.com/doc/DUkFJY1NkTk9mZnBM 1.选中下载好的安装包&#xff0c;鼠标右键解压到“Maple 2023”文件夹 2.选中setup-windows.exe&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“OK” 4.点击“Next” 5.选择I accept the ag…