6.2 、MyBatis 高级映射(resultMap 标签多表联查 , 一对多,多对一关系)

news2024/12/23 3:13:46

文章目录

  • 一、实现多表联查(association 标签)
    • 1、实现多对一关系结果集映射
  • 二、实现多表联查(collection 标签)



一、实现多表联查(association 标签)


  • association 标签: 实现一对一,多对一的关联关系

    • association 标签属性

      • property :实体类属性名

      • javaType :指定关联的类型,当使用select属性时,无需指定关联的类型

      • select :使用另一个select查询封装的结果。当使用该属性时,无需配置实体类与数据库之间的映射关系

      • column :为数据库中的列名,与select配合使用(注:如果SQL中使用字段别名,那么此属性便记录字段别名)



1、实现多对一关系结果集映射


  • 多对一:

    • 多个学生,对应一个老师

    • 对于学生而言,关联–多个学生,关联一个老师【多对一】

    • 对于老师而言,集合–一个老师,有很多个学生【一对多】

  • SQL

-- 创建教师表
CREATE TABLE IF NOT EXISTS `teacher` (
  `id` int(10) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--新增一名教师
INSERT INTO `teacher` (`id`, `name`) VALUES (1, '柳神');

-----------------------------------------------------------------
--创建学生表
CREATE TABLE IF NOT EXISTS `student` (
  `id` int(10) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `tid` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fktid` (`tid`),
  CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--新增学生
INSERT INTO `student` (`id`, `name`, `tid`) VALUES(1, '楚风', 1),(2, '龙大宇', 1),(3, '姬大德', 1),(4, '石昊', 1),(5, '叶凡', 1);





       实现多对一查询的方式有两种,一种是按照查询嵌套处理,一种是按照结果嵌套处理。

  • 按照查询嵌套处理,(但是需要两个sql 才能实现,看着有点怪异,不推荐使用)
 <select id="getStudent" resultMap="StudentMap">
        select * from student
    </select>

    <resultMap id="StudentMap" type="Student">
        <result column="id" property="id"/>
        <result column="name" property="name"/>

        <!-- 通过 select 调用查询教师的 SQL,将结果集存储到JavaBaen中,类似于子查询  -->
        <association property="teacher" column="tid" javaType="Student" select="getTeacher"/>
    </resultMap>

    <select id="getTeacher" resultType="Teacher">
        select * from teacher
    </select>



  • 按照结果嵌套处理(推荐使用)
<resultMap id="StudentAndTeacher" type="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>

        <!-- 将查询结果映射到 Teacher 实体类中 -->
        <association property="teacher" javaType="Teacher">
            <result property="name" column="tname"/>
        </association>
    </resultMap>


    <select id="getStudentAndTeacher" parameterType="Student" resultMap="StudentAndTeacher">
        select s.id sid, s.name sname, t.name tname
        from student s,
             teacher t
        where s.tid = t.id
    </select>

运行结果:

在这里插入图片描述




二、实现多表联查(collection 标签)

  • collection 标签: 实现一对多,多对多的关联关系

    • collection 标签属性

      • property :实体类属性名

      • select :使用另一个select查询封装的结果。当使用该属性时,便不需要在配置实体类与数据库之间的映射关系了

      • column :为数据库中的列名,与select配合使用(注:如果SQL中使用字段别名,那么此属性便记录字段别名)

      • ofType :指定集合中元素的对象类型

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

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

相关文章

因果推断1--基本方法介绍(个人笔记)

目录 一、因果推断介绍 1.1 什么是因果推断 1.2为什么研究因果推断 1.3因果推断阶梯 1.4因果推断问题分类 二、因果推断理论框架 2.1 定义&#xff08;这些定义后面会经常用到&#xff09; 2.2 Assumptions&#xff08;三大基本假设&#xff09; 三、因果效应估计 3.1 因果效应…

JavaEE【Spring】:SpringBoot 配置文件

文章目录一、配置文件的作用二、配置文件的格式1、注意2、说明三、properties 配置文件说明1、基本语法2、读取配置文件① 注意3、优缺点四、yml 配置文件说明1、基本语法2、yml 使用进阶① yml 配置不同数据类型及 nullⅠ. yml 配置读取Ⅱ. 练习a. 值为 null 的配置b. 根本不存…

利用云服务器发布项目

前言 平时开发我会写一些小demo&#xff0c;我自己觉得有用的会集中起来形成一个项目&#xff0c;本来想利用gitee的gitee page直接部署出来&#xff0c;但后面了解了下&#xff0c;它只支持官网之类的静态页面&#xff0c;无法与后台数据交互&#xff0c;想要完整的服务还是得…

数据分析业务场景 | 用户画像

一.概况 定义 是根据用户的一系列行为和意识过程建立起来的多维度标签&#xff1b;是根据用户人口学特征&#xff0c;网络浏览内容&#xff0c;网络社交活动和消费行为等信息而抽象出的一个标签化的用户模型&#xff1b;首要任务&#xff1a;根据业务需求整理和数据情况分析建…

Springboot redirect重定向使用RedirecAtrributes传递数据

参考资料 【转载】关于重定向RedirectAttributes的用法RedirectAttributes 的使用 目录前期准备一. RedirecAtrributes重定向传参三. 重定向目标页面接收参数前期准备 ⏹配置文件 server:servlet:context-path: /jmw⏹访问url http://localhost:8080/jmw/test16/init?name…

NX二次开发(C#)-UI Styler-选择对象TaggedObject转换为Body、Face等对象

文章目录 1、前言2、选择对象的过滤器2、选择对象类型为TaggedObject3、TaggedObject转换为Face类型1、前言 前面的博客中已经写过了UI Styler中选择对象(selection)的一些内容,但是依然有读者不知道运用,本文将在前文的基础上更加深入的介绍选择对象的应用(建议与https:/…

DevExpress Universal添加对.NET 7的支持

DevExpress Universal添加对.NET 7的支持 DevExpress已经发布了整个产品系列的主要更新。 CodeRush Ultimate 22.2-为许多重构添加了核心性能优化和增强。 DevExpress.NET MAUI 22.2-添加了对Material Design 3指南的支持&#xff0c;以及对数据网格的自定义过滤、排序和分组。…

PCB封装

目录 1.PCB元器件库分类及命名 1.2PCB封装图形要求 2.封装制作 手工制作封装的操作步骤 1.PCB元器件库分类及命名 元器件采用大写字母表示&#xff0c;PCB元器件库分类及命名如表。 2.PCB封装图形要求 &#xff08;1&#xff09;外形&#xff1a;指元器件的最大外形尺寸。封…

【微电网优化】基于粒子群实现微网经济调度,环境友好调度附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Java 中的不同参数类型

是不是还傻傻分不清参数配置到底怎么写&#xff0c;写在哪个位置&#xff0c;那么这篇文章就让你学会。 目录 1、Program arguments 2、VM options 3、Environment variables 最佳实践 打开 IDEA 的 Run Configuration&#xff0c;可以看到以下参数配置 VM optionsProgram…

springboot+vue美食网站idea maven

目 录 摘 要 I 1 绪论 1 1.1研究背景 1 1. 2研究现状 1 1. 3研究内容 2 2 系统关键技术 3 2.1 springboot框架 3 2.2 JAVA技术 3 2.3 MYSQL数据库 4 2.4 B/S结构 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1. 2经济可行…

12.11哈希表

目录 一.哈希表 1.概念 2 冲突-概念 3 冲突-避免 4 冲突-避免-哈希函数设计 直接定制法--(常用) 2. 除留余数法--(常用) 3. 平方取中法--(了解) 4. 折叠法--(了解) 5. 随机数法--(了解) 6. 数学分析法--(了解) 5 冲突-避免-负载因子调节&#xff08;重点掌握&#…

151-160-mysql-高级篇-设计规范及其他调优策略

151-mysql-高级篇-设计规范以及其他调优策略&#xff1a; 1、数据库的设计规范 1. 范 式 1.1 范式简介 **在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。**可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的级别。要想设计一…

iOS 组件二进制与源码查看及调试方案

好久没有写文章了这里记录一下把项目代码二进制化提高编译效率的整个过程中碰到的问题和解决方案 先提一下优化编译速度的基本方向基本就是从不同的编译阶段来出主意&#xff0c;比如&#xff1a; 预编译阶段的头文件查找&#xff1a; 一款可以让大型iOS工程编译速度提升50%的…

[附源码]Node.js计算机毕业设计大学生心理咨询系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

无法安装vmnet8虚拟网络适配器、vmware network editor未响应、注册失败,请检查账号数据库配置是否正确的解决

文章目录虚拟网络适配器安装 | vmware network editor未响应注册失败&#xff0c;请检查账号数据库配置是否正确的解决关于第一次安装虚拟机的全文约 423 字&#xff0c;预计阅读时长&#xff1a; 2分钟虚拟网络适配器安装 | vmware network editor未响应 原因&#xff1a;卸载…

JDK8 ThreadLocal 源码解析与最佳实践

文章目录用法Example1Example2Springboot Transcation 注解的原理Entry 的 Key 设置为弱引用有什么好处内存泄漏问题为什么 ThreadLocal 不需要 ReferenceQueueget()getEntrygetEntryAfterMissThis class provides thread-local variables. These variables differ from their …

路径规划|多目标海洋捕食者算法(MOMPA)求解最短路径问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1 LabVIEW面向对象编程(OOP)采用仪器为中心的硬件抽象层(HAL)&#xff0c;使用面向对象的设计模式&#xff0c;可以部署一个仪器重用库&#xff0c;该库可以随着需求和仪器趋势的变化而增长&#xff0c;同时在不可避免的硬件过…

【Redis】主从复制

一、简介 1、什么是主从复制 主机数据更新后根据配置和策略&#xff0c;自动同步到备机的master/slave机制&#xff0c;Matser以写为主&#xff0c;Slave以读为主&#xff0c;简单来说如下图 2、主从复制的好处 读写分离&#xff1a;Matser以写为主&#xff0c;Slave以读为主…