SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询

2023-11-19

摘要:本文我们将继续分享介绍Spring Boot在整合Mybatis开发企业级应用时其他典型的业务场景,即Mybatis是如何实现多表关联查询时将查询结果集与对象进行映射的,主要的内容包含“一对一的表关联”和“一对多/多对多的表关联”查询。

内容:在上一篇文章中,我们分享介绍了如何基于Spring Boot搭建的标准企业级项目整合第三方的持久层依赖Mybatis,并实现最基本的CRUD功能,此种CRUD估计大伙都明白这是只针对“单一的数据库表”操作的。

而本文我们将趁热打铁,继续分享介绍不一样的内容,即如何基于Mybatis实现“Java对象”与“多表关联查询结果集”的映射。

在开始代码实战之前,我们简单的需要建立两张数据库表,分别是user用户表、comment评论表,其对应的数据库建表语句DDL如下所示:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '名字',
  `code` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '工号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';
CREATE TABLE `comment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '评论',
  `user_id` int(11) DEFAULT NULL COMMENT '评论者id',
  `article_id` int(11) DEFAULT NULL COMMENT '文章id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='评论';

其中,在上一篇文章中建立的数据库表 “article文章”的user_id即来源于user用户表的主键id,而一篇文章会有很多评论,这些评论信息将存储在comment评论表中,从而,我们可以看出,user与article数据表是平级的关系,而article与comment数据库表则属于一对多的关联关系!

废话不多讲,下面就代码实战环节:

一、数据库表为一对一的平级关联关系实战(涉及user、article表)

(1)首先我们需要明确实战的业务场景:“根据文章的主键id或者文章的详情,在文章的详情中除了需要显示文章的具体信息之外,还需要显示作者的相关信息”。

基于这样的业务场景,首先我们需要将Sql写好,如下所示为Mapper.xml对应的代码:

<select id="selectById" resultType="com.debug.springboot.model.entity.Article">
    SELECT
      a.id,
      a.title,
      a.user_id,
      b.name AS userName
    FROM article AS a LEFT JOIN user AS b ON b.id = a.user_id
    WHERE a.id = #{id}
  </select>

更多请见:http://www.mark-to-win.com/tutorial/51039.html 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询 的相关文章

随机推荐

  • Oracle:数据库设计三大范式

    数据库设计三大范式 为什么要谈及范式 这也是为了数据库设计做准备 对于表设计而言 我们需求何种程度的设计 这完全取决你数据的规模 好比你建房子 要是建个一两层 基本上不需要什么设计 直接开工就行 要是建个这样的房子还找设计公司的话 这无疑是
  • 安装win7后怎么装linux系统,小编教你如何使用u盘安装Linux系统

    第二步 u盘安装Linux 1 U盘插到要安装Linux的电脑上后 启动电脑 在启动时 一直按F2键 就能进入到主板的BIOS控制界面 按左右键移动到boot选项 然后按上下键到removeable device选项 再按 号移动它的位置在
  • flutter城市选择页面

    import dart convert import package test http DioManager dart import package test http api life api dart import package t
  • [分布式] zookeeper集群与kafka集群

    目录 一 Zookeeper 概述 1 1 Zookeeper定义 1 2 Zookeeper 工作机制 1 3 Zookeeper 特点 1 4 Zookeeper 数据结构 1 5 Zookeeper 应用场景 1 6 Zookeepe
  • 小程序跳转小程序

    小程序如何跳转到其他小程序 微信小程序跳转到其他小程序有两种方式 一种是用组件navigator跳转
  • python简单的预测模型_如何使用 Python 或 matlab 实现一个简单根据年份预测年龄的模型...

    Escapist367 110 天前 import torch inputs outputs for year1 in range 1900 2020 for year2 in range 1900 2020 for age1 in ran
  • OD机试题目【计算网络信号】

    网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网络信号值 注意 网络信号可以绕过阻隔物 array m n 的二维数组代表网格地图 array i j 0代表i行j列是空旷位置 array i j x x
  • devops理念

    一 开发模式 传统开发模式 也就是瀑布型开发 瀑布模型式是最典型的预见性的方法 严格遵循预先计划的需求 分析 设计 编码 测试的步骤顺序进行 例如需求规格 设计文档 测试计划和代码审阅等等 其中需求分析占比很重 对客户想要的产品进行详细分析
  • android jni 报错 libjnidispatch.so 找不到

    Caused by java lang UnsatisfiedLinkError Native library com sun jna android arm libjnidispatch so not found in resource
  • ffmpeg by id和by name查找decoder的区别

    转自 https blog csdn net muyuyuzhong article details 79735763 同一个 AVCodecID 可能对应多个不同的编解码器 AVCodec 他们有不同的 AVCodec name avco
  • 一张图深度解析Linux共享内存的内核实现

    一张图深度解析Linux共享内存的内核实现 Sailor forever sailing 9806 163 com http blog csdn net sailor 8318 article details 39484747 PDF版本下
  • ThreadLocal学习

    1 threadLocal图解 java lang ThreadLocal类实现了线程的本地存储 ThreadLocal的内部实现 ThreadLocal的内部实现包括一个类似HashMap的对象 这里称之ThreadLocalMap Th
  • 华为OD机试 - 表达式括号匹配(Java)

    题目描述 1 2 3 3 8 0 1 2 这是一个简单的数学表达式 今天不是计算它的值 而是比较它的括号匹配是否正确 前面这个式子可以简化为 这样的括号我们认为它是匹配正确的 而 这样的我们就说他是错误的 注意括号里面的表达式可能是错的 也
  • rhel的一些配置

    ip etc sysconfig network scripts ifcfg eth0 DEVICE eth0 NM CONTROLLED yes ONBOOT yes BOOTPROTO dhcp BOOTPROTO static IPA
  • 消息转换器统一对null值处理

    import java nio charset Charset import java util ArrayList import java util List import org springframework context anno
  • STM32 CAN通信理解(是半双工还是全双工?)

    STM32F429 CAN通信 CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519 是国际上应用最广泛的现场
  • 数据结构--二叉树的二叉链表实现

    1 二叉树的二叉链表示意图 二叉链表的每个结点由三个域组成 数据域 左指针域和右指针域 左右指针分别用来保存左右孩子结点的存储地址 2 二叉链表实现二叉树 2 1 头文件及其定义 BTNode h pragma once typedef c
  • 利用umi实现前端自定义打包

    背景 目前项目有这么一个需求 一套前端代码里面有两个项目 这两个项目一个是设备页面 一个是平台页面 因为这两个项目有共同的页面和代码 所有就写在一个仓库里面 出现的问题是 打包项目A并且也会随带的项目B的代码 这就会造成打包体积的增大 打包
  • java bean的使用

    这是我最终尝试成功的项目页面截图 网页效果 注意的点 1 Dog类 bean类 必须拥有一个无参构造器 这和spring里的bean的设计是一个理念 spring借鉴于javabean 2 通过getXxx和setXxx方法来访问成员变量
  • SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询

    摘要 本文我们将继续分享介绍Spring Boot在整合Mybatis开发企业级应用时其他典型的业务场景 即Mybatis是如何实现多表关联查询时将查询结果集与对象进行映射的 主要的内容包含 一对一的表关联 和 一对多 多对多的表关联 查询