MyBatis复杂查询环境,多对一、一对多处理

MyBatis(三) MyBatis 文章目录 MyBatis 十.复杂查询环境搭建 1.多对一处理 2.一对多处理 3.小结: 十一.动态SQL 1.环境搭建 2.if语句 3. choose(when,otherwise) 4. trim(where、set) 5.SQL片段 6.Foreach 十二.缓存 1.简介 2.MyBatis缓存 3.一级缓存 4.二级缓存 5.缓存原理 6.自定义缓存 十.复杂查询环境搭建 1.多对一处理 例如:多个学生对应一个老师 对于学生这边而言:关联 多 阅读详情

复杂环境搭建

①创建SQL表

CREATE TABLE `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, 'qin');

CREATE TABLE `student` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    `tid` INT(10) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `ftkid` (`tid`),
    CONSTRAINT `ftkid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


INSERT INTO student(`id`, `name`, `tid`) VALUEs (1, 'yi', '1');
INSERT INTO student(`id`, `name`, `tid`) VALUEs (2, 'er', '1');
INSERT INTO student(`id`, `name`, `tid`) VALUEs (3, 'san', '1');
INSERT INTO student(`id`, `name`, `tid`) VALUEs (4, 'si', '1');
INSERT INTO student(`id`, `name`, `tid`) VALUEs (5, 'wu', '1');

建立老师、同学表,同学的tid对应老师外键id

②创建表对应实体类Student和Teacher

③建立Mapper接口

④建立Mapper对应xml文件

⑤核心配置中注册Mapper接口文件

多对一处理

多个学生由一个老师教学,查询出所有学生以及每个学生对应老师的信息。

嵌套子查询

<!-- ①查询所有学生
     ②依据tid查询对应老师
-->
    <resultMap id="studentTeacher" type="Student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
<!--        复杂属性需要单独处理
            对象使用association
            集合使用collection
-->
        <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
    </resultMap>


    <select id="getStudent" resultMap="studentTeacher">
        select * from student s, teacher t where s.tid = t.id;
    </select>

    <select id="getTeacher" resultType="Teacher">
        select * from teacher where id=#{tid};
    </select>

因为学生对象中有Teacher复杂成员,用resultMap对其处理,该对象由tid属性再次执行查询命令。

按结果嵌套

    <select id="getStudent" resultMap="StudentTeacher">
        select s.id sid,s.name sname,t.name tname,t.id tid from student s, teacher t where s.tid = t.id;
    </select>

    <resultMap id="StudentTeacher" type="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="teacher" javaType="Teacher">
            <result property="id" column="tid"/>
            <result property="name" column="tname"/>
         </association>
    </resultMap>

该方式就是依据查询结果,用resultMap一一对应设置进去。

一对多处理

一个老师教学多个学生,对于老师就是一对多关系,老师实体类用List集合存储学生

结果嵌套处理

    <select id="getTeacher" resultMap="TeacherStudent">
        select s.id sid, s.name sname, t.name tname, t.id tid
        from student s,teacher t
        where s.tid=t.id and t.id=#{tid}
    </select>

    <resultMap id="TeacherStudent" type="Teacher">
        <result property="id" column="tid"/>
        <result property="name" column="tname"/>
        <collection property="students" ofType="Student">
            <result property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="tid"/>
        </collection>
    </resultMap>

注意使用collection中,获得集合泛型类型时,需要用ofType="Student"

嵌套查询处理

    <select id="getTeacher" resultMap="TeacherStudent">
        select * from teacher where id = #{tid}
    </select>
    <resultMap id="TeacherStudent" type="Teacher">
        <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/>
    </resultMap>

    <select id="getStudentByTeacherId" resultType="Student">
        select * from student where tid=#{tid};
    </select>

小结

①关联 association:对照复杂对象,多对一
②集合 collection:对照集合,一对多
③javaType:指定实体类中属性类型
④ofType:指定集合泛型类属性类型

【Mybatis】Lombok使用以及复杂查询(一对多、多对一) 介绍Lombok插件以及mybatis中的一对多、多对一查询 阅读详情

相关推荐

Mybatis的多对一与一对多查询 Mapper.xml 讲解

文章目录Mybatis、一、数据库搭建二、多对一查询**1.创建Student实体类****2.创建Teacher实体类****3.StudentMapper构建****4. StudentMapper.xml 讲解(只展示核心代码部分)****4.1 按照查询嵌套处理****4.2 按照结果嵌套处理**三、一对多1. 创建Student实体类2. 创建Teacher实体类对象3. TeacherMapper构建4. TeacherMapper.xml讲解(只展示核心代码部分)4.1 按照结果嵌套处理4

JssenJ的博客 1584

mybatis复杂sql查询——多对一和一对多处理

以学生表(Student)和教师表(Teacher)为例: 其中tid为外键约束 多对一处理 按查询嵌套处理 (相当于sql中的子查询) 思路: 1.查询所有的学生信息 2.根据查询出来的学生信息中的tid,查找教师信息:子查询 /** * 查询学生信息以及对应的老师信息 * @return */ public List<Student> getStudentInfo(); /** * 获取学生表tid列名对应的教师信息 * @param id 每个学生对应的教师编号 *

小洋人的博客 757

STM32F407+HAL库+W5500实现TCP通讯 个人项目总结

推荐阅读此博客 cv即可成功首先需要一个可以进行串口调试的工程,方便进行调试。1.在W5500官网移植库文件重点是Ethernet这个文件夹将里面的 socket.c,socket.h,wizchip_conf.c,wizchip_conf.h,还有根据W5500文件夹里的w5500.c和w5500.h移植到自己的工程里面。然后再创建一个.c和.h文件 我的叫w5500_port_hal.c 和w5500_port_hal.h 记得将.h文件链接到工程里。

a234abr的博客 2246

动态sql MyBatis处理多对一,一对多映射关系

项目复习补充

GJ_863的博客 467

Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算

在用Allegro进行PCB设计的时候,Cross-section中需要填入对应的信息,一般填入每层的厚度即可,如下图。当PCB需要进行仿真分析的时候,Etch-Factor这个值是必须要填写的,如下图。实际铜皮进行蚀刻的时候,Etch-Factor的值并不是标准的90度,如下图。线路层实际形状是个梯形,Etch-Factor代表的就是梯形的角度,如下图。首先输入数值,比如1,再点击Inv,最后点击tan-1,可以得到角度的值。如果tanσ=2,σ=63.4,如下图计算结果。即tanσ=1,得到σ=45。

weixin_54787054的博客 884

基于方差分解分析气象/水文干旱驱动因素(含MATLAB全代码)

简介基于方差分解方法分析气象/水文干旱驱动因素

WW、forever的博客 801

Mybatis--sql多对一的处理

  我们先来看看下图所示的例子,学生和老师之间就是一种多对一的关系。 对于学生这边而言,多个学生关联一个老师【多对一】; 对于老师这边而言,

hpf_coding的博客 726

文章ACCEPT之后填写内容教程-Springer-Verlag即施普林格

1. 确认corresponding author通讯作者机构是否正确(最好细分到系,如搜不到系只填大学也可)这些信息因为在投稿的时候都填过,所以一般都没问题,可确认并继续。2. Co-Author: 这篇文章有没有其他作者,如果有就选yes,并确认投稿时所填的作者姓名和机构是否正确。这个也是如果前期都填对了就不用修改。3. Research funders: 问文章的研究有没有资助,没有就选no,有就选yes,并填写机构名称和grant/contact numbers。

ZhangJiqun&191cm&85kg 4775

mybatis中 一对多(collection)、多对一(association)的一些处理方式

mybatis中 一对多(collection)、多对一(association)的一些处理方式

听钱塘信来的博客 2203

026:vue+threeJS 设置地面铺砖的效果

BoxGeometry 是 Three.js 中用于创建立方体或长方体的几何体类。它允许你指定立方体的宽度、高度、深度以及这三个方向上的分段数,从而控制立方体的细分程度。width: 立方体的宽度(沿 x 轴方向)。height: 立方体的高度(沿 y 轴方向)。depth: 立方体的深度(沿 z 轴方向)。widthSegments: 可选参数,指定立方体在 x 轴方向上的分段数,默认值为 1。heightSegments: 可选参数,指定立方体在 y 轴方向上的分段数,默认值为 1。

大剑师兰特的GIS世界 645

【Matlab】从零开始掌握 MATLAB 安装激活:从环境搭建到问题解决全指南

打开 MATLAB,点击 “主页 - 设置路径”;点击 “添加文件夹”,选择自定义的工作文件夹,点击 “保存”,重启 MATLAB 生效。MATLAB R2024a 的安装与激活是开启 MATLAB 学习的第一步,也是构建稳定学习环境的基础。本文从安装前准备、分步操作、验证测试、问题解决到环境优化,完整覆盖了新手所需的所有知识点 —— 核心要点在于:确认系统兼容、使用合法授权、选择纯英文安装路径、完成功能验证。

unber的博客 596

Mybatis学习(五)Lombok的使用和处理多对一,一对多问题

1.Lombok Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。 使用步骤: 在IDEA中安装Lombok插件! 在项目中导入lombok的jar包 <dependency> <groupId>org.projectlombok</groupId> <artifactId&

一点莹的博客 305

云端全自动AI漫剧生成工作流:从模型选型到完整实现

本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块

huanghm88的专栏 640

Mybatis多表查询之一对多、多对一

前言 上次整理了单表的一些基本操作,现实工作可能会涉及复杂的多表查询,本文主要对Mybatis多表查询之一对多、多对一进行讲述。无论是一对多还是多对一,无非是涉及两个标签:collection和association,至于怎么去用和理解,后文会说明。每种查询都可以用两种方式去实现:按照查询嵌套处理(子查询)和按照结果嵌套处理(联表查询)。在进行操作前,需要把相关配置搞定,可以参考博主以往的博客。看之前需要对几个标签有所理解: property:对象、成员变量属性的名称 column:数据库字段名..

静水流深,沧笙踏歌 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

mybatis05:复杂查询:(多对一,一对多)

💕💕💕重点:推荐使用写sql难一点,但写resultMap简单一点的方法(完完整整将语句语句给写完!!!

lenard-lhz的博客 1155

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MyBatis复杂查询——一对一、一对多

在实际的开发中,我们遇到的需求更多的是需要多表进行关联查询获取需要的数据。所以本篇讲解一对一、一对多

xiximo 2425

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mybatis的多对一,一对多处理

多对一: 多个学生对应一个老师 对于学生而言,关联多个学生,关联一个老师【多对一】 对于老师而言,集合一个老师有很多学生【一对多】 SQL: CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO teacher(`id`, `name`) VAL

Solitude_w的博客 212

MyBatis实现复杂查询(多对一,一对多)

搭建环境 用如下表: CREATE TABLE `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, '...

空空少年郎的博客 728

Mybatis的多对一和一对多嵌套查询

嵌套查询建表多对一一对多 建表 CREATE TABLE `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 `student` ( `id` INT(10) NOT NULL,

LongKai_G 1833

MyBatis:使用 MyBatis 实现多表查询(多对一和一对多)、动态 SQL、缓存

详细介绍了使用 MyBatis 实现多表查询(多对一和一对多)、动态 SQL 以及缓存的相关内容

taiyang3285的博客 3991

Mybatis 复杂查询(多对多、一对多、多对一)

我们知道,在 Mybatis 中完成单表查询是很容易的,而多表查询是 Mybatis 框架中的一个重难点,需熟练掌握。 文章目录1、多对多查询2、 一对多查询写法1写法23、多对一查询方式1方式24、总结 1、多对多查询 用户和小组为多对多的关系,需求为:通过用户 id 查找其所有的小组信息 数据库设计如下: 实体类: public class User { private int uId; private String uName; private List<Group.

qq_45716120的博客 1198

【MyBatis】多对一与一对多处理

1.搭建测试环境 背景: 多个学生,对应一个老师 对于学生这边而言, 关联 … 多个学生,关联一个老师 【多对一】 对于老师而言, 集合 , 一个老师,有很多学生 【一对多】 创建学生和老师的SQL语句 CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 IN

alovelypeach的博客 457

MyBatis中多对一、一对多的复杂查询

情景:现在我们有两张表,一张学生表,一张教师表,学生表中的字段有id,name,tid,教师表中字段有id,name,现在学生表中的tid跟教师表中的id关联,我们试图在查询学生信息的同时,顺便把对应tid的教师信息也一并输出。 一: association按照查询嵌套处理 已知我们打算从学生表里查询到教师信息,而教师信息对应的是一个实体类,因此我们在学生的实体类中加入一个教师类型的字段并设...

Deeeelete的博客 302

MyBatis:使用 MyBatis 实现多表查询(多对一和一对多)、缓存

MyBatis 是一个优秀的持久层框架,它可以自定义 SQL、存储过程和高级映射。MyBatis 提供了一级缓存和二级缓存两种缓存机制。一级缓存是基于 SqlSession 的,它默认开启且不可关闭,可以提高相同 SqlSession 内相同 SQL 查询的性能。而二级缓存是基于 Mapper 的,它可以跨 SqlSession 共享,需要手动配置开启,并且可以配置缓存的失效策略和刷新机制。注意:二级缓存只作用于cache标签所在的映射文件中的语句。

Z99263的博客 1656

Mybatis05-一对多和多对一处理

d=4, name=‘小李’, tid=1}, Student{id=5, name=‘小王’, tid=1}]}association是用于一对一和多对一,而collection是用于一对多的关系。association是用于一对一和多对一,而collection是用于一对多的关系。4、注意一对多和多对一 中:字段和属性对应的问题。4、注意一对多和多对一 中:字段和属性对应的问题。关联:association【多对一】关联:association【多对一】TeacherMapper接口`

xzh202206的博客 1342
上一篇: MyBatis执行流程
下一篇: MyBatis动态SQL
魔幻音
博客等级 码龄6年 16粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值