MyBatis多表关联查询

20. 如何在MyBatis中处理多表关联查询?常见的实现方式有哪些? 手动SQL拼接方式适合更复杂的查询场景,可以完全利用SQL的能力来处理多表关联查询。选择哪种方式应根据具体的需求和查询复杂度来决定,合理使用这些方式可以有效地处理数据库的多表关联查询,提高系统的性能和可维护性。这种方式完全在Java代码中控制多表关联的查询和映射,适合处理非常复杂的业务逻辑或需要进行额外的数据处理的场景。在某些复杂的场景下,开发者可能希望完全控制SQL语句的生成,这时可以手动编写多表关联查询的SQL。:处理一对多或多对多关联关系,将从表的多行数据映射为主表对象的一个集合属性。 阅读详情

本文将向大家介绍 MyBatis 中的多表关联查询

主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询

第一个示例:老师和学生关联

​ 老师和学生是一对多的关系,一名老师管教多名学生

​ 学生和老师是多对一的关系,多名学生被一名老师管教

​ 那么如何查询所有学生以及管教他们的老师呢?

​ 又如何查询所有老师和他所管教的学生呢?

第二个示例:账户和课程关联

​ 在网上选课系统中,账户和课程是多对多关系,

​ 一个账户可以选择多门课程,而一门课程也可以被多个账户选择

​ 那么如何查询账户以及此账户所选择的课程呢?

​ 又如何查询课程以及选择这门课程的账户呢?

下面我们就来一步一步解决这两个问题吧

一、搭建测试环境(一对多和多对一)

(一)创建测试数据库
CREATE TABLE `t_teacher` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

CREATE TABLE `t_student` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `tid` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

image-20210810120108788

mybatis多表查询-学生数据表


(二)根据测试数据库创建实体类
  1. 学生类

    package com.jarreet.test.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class Student {
         
         
        private Integer id;
        private String name;
        private Integer tid;
    
        // 学生关联一个老师
        private Teacher teacher;
    }
    

  2. 老师类

package com.jarreet.test.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Teacher {
   
   
    private Integer id;
    private String name;

    // 老师关联一群学生
    private List<Student> studentList = new ArrayList<>();
}


(三)文件配置
  1. 在 application.yml 配置 mybatis

    mybatis:
      type-aliases-package: com.jarreet.test.pojo
      mapper-locations: classpath:mapper/*.xml
      configuration:
        map-underscore-to-camel-case: true
    

  2. 在 TestApplication 启动类上加上包扫描注解

    @MapperScan("com.jarreet.test.dao")
    

二、多对一查询

我们根据上面搭建的环境,给出一个查询需求:查询所有学生的信息及他们的老师

(一)数据持久化层
  1. StudentDao.java

    package com.jarreet.test.dao;
    
    import com.jarreet.test.pojo.Student;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface StudentDao {
         
         
    
        public List<Student> getAllStudents();
    }
    

  2. StudentMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.jarreet.test.dao.StudentDao">
    
        <!-- 查询文章管理列表多对一配置 -->
        <resultMap id="studentAndTeacher" type="com.jarreet.test.pojo.Student">
            <id property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="stid"/>
            <association property="teacher" javaType="com.jarreet.test.pojo.Teacher">
                <id property="id" column="tid"/>
                <result property="name" column="tname"/>
            </association>
        </resultMap
Mybatis 的多表关联查询 Mybatis 的多表关联查询 本次案例主要以最为简单的用户和账户的模型来分析 Mybatis 多表关系。用户为 User 表,账户为Account 表。一个用户(User)可以有多个账户(Account)。具体关系如下: 1. 一对一查询 案例:查询所有账户信息,关联查询下单用户信息。 注意:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询。如果... 阅读详情

相关推荐

Mybatis多表关联查询

MyBatis多表关联查询的使用,一对多查询,多对一查询,自关联查询,多对多查询

qq_34332010的博客 5114

MyBatis从入门到多表关联

1.Spring JDBC 2.Spring事务管理 3.MyBatis核心配置 4.MyBatis多表关联

lydms的博客 1万+

MyBatis 多表关联查询

MyBatis 多表关联查询:一对多查询, 多对一查询, 自连接查询: 使用多对一的方式实现自连接, 使用一对多的方式实现自连接, 多对多查询

不迁怒,不贰过。小知识,大智慧。 4402

【Unity】【模型】【AI建模】如何将AI生成的GLB格式3D模型文件导入Unity

本文介绍了一个将AI工具自动生成的GLB格式3D模型文件转换成fbx模型文件导入Unity的步骤。

O青草O的博客 Unity和游戏制作知识分享 1357

SAP 资产主数据屏幕增强:对比字段追加与子屏幕/页签 2 种方案优劣

本文深入对比了SAP资产主数据(AS01/AS03)屏幕增强的两种方案:字段追加与子屏幕/页签。从技术实现、业务适配、系统维护等维度分析各自优劣,提供方案选型决策树和混合方案实践建议,帮助企业在SAP实施中做出最优选择。

weixin_28559803的博客 283

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3039

34、实数域上高效负循环卷积算法解析

本文介绍了一种高效的实数域负循环卷积算法,通过引入离散傅里叶负循环变换(DFNT)避免传统方法的冗余,显著提升计算效率。文章详细分析了算法原理、误差传播机制,并推导出误差与方差界,提出无误差和基于3σ规则的参数设置方案。结合Cooley-Tukey与Gentleman-Sande FFT路径优化,实验验证了算法在不同精度和多项式长度下的性能优势与结果正确性,为密码学与信号处理等领域提供了高精度、高性能的卷积计算解决方案。

salt的博客 113

【PX4学习笔记】1. ROS及PX4环境搭建

环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d

【人工智障 | 计算鸡视觉 | 机器孩】 8229

基于DeepFashion2和YOLOv12的服装检测系统:从数据集构建到UI界面实现

官方网站:数据集大小: 约80GB(压缩包)包含训练集、验证集和测试集数据集目录结构:text复制下载├── train/└── test/├── image/├── annos/Backbone优化:使用更高效的CSPNet结构Neck增强:引入BiFPN特征金字塔网络Head改进:使用解耦头(Decoupled Head)提升分类和定位精度损失函数:采用CIoU损失和分类Focal Loss训练策略:引入Mosaic数据增强和自适应锚框python复制下载。

YOLO 498

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+

YOLO26 正式发布源代码!极致速度优化方案, 面向工业级落地的目标检测模型!

YOLO26 作为 Ultralytics 公司于 2025 年 9 月发布的最新一代目标检测模型,在架构设计和技术实现上展现了显著的创新。本文深入分析了 YOLO26 的核心架构改进和技术原理,重点探讨了其在边界框回归、推理流程、损失函数设计和优化算法方面的突破性进展。

魔改工程师的博客 1243

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Java后端学习笔记 -- JDBC(三)
离渊灬
博客等级 码龄9年 13粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值