对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

  • 一、 前端界面需要展现多个表的其中几个数据的多表查询。
    • 1. 三个表查询其中字段返回:(用一下sql语句)
    • 2. 进行封装实体类,返回前端
    • 3. 如果前端需要在一个表单里面插入或者修改多个表,我们可以这样做:
  • 二、按F12然后查看cook中的接口
    • 1 查看请求方式
    • 2 查看封装的属性、状态值等信息
  • 三、数据库各种查询(黑马):示例和代码
    • 1 多对多
    • 2 一对一
    • 3 如果我们直接查询两张表会出现迪卡效应(把两张表进行乘机配对)
    • 4 通过两个id来查询两个表
    • 5 多表查询的概述:
    • 6 内连接(查询公共字段)
    • 7 外连接(左、右连接):(查询左、右边的数据库和公共的部分)
    • 8 自连接(把一个表,通过别名弄成两个表,来查询自己表的数据)
    • 9 自连接+左连接
    • 10 联合查询 union all全部合并,union 去重后合并
    • 11 子查询(嵌套查询)
    • 12 标量子查询(先查询出一个,然后其他表通过这一个作为条件继续查)
    • 13 列子查询(先查出一列的数据,然后被用作条件查询)
    • 14 行子查询(查出一行,作为其他查询的条件)
    • 15 表子查询(查出一个表,作为其他查询的条件)

一、 前端界面需要展现多个表的其中几个数据的多表查询。

1. 三个表查询其中字段返回:(用一下sql语句)

假设有三张表:table1,table2 和 table3,它们的结构如下:
table1 包含字段:id, name, description, created_at, updated_at
table2 包含字段:id, table1_id, field1, field2, field3
table3 包含字段:id, table2_id, value1, value2, value3
现在我们需要从这三张表中查询:
table1 的 name 和 description 字段
table2 的 field1 和 field2 字段
table3 的 value1 和 value2 字段

SELECT t1.name, t1.description, t2.field1, t2.field2, t3.value1, t3.value2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id
JOIN table3 t3 ON t2.id = t3.table2_id;

在这里插入图片描述

2. 进行封装实体类,返回前端

老师带我观察页面前端我发现,他们返回的都是一个List列表,然后把需要返回的封装为一个实体类,再返回前端。强烈建议,一定要通义属性的命名,不然当你写这个实体类的时候,超级痛苦!!!

3. 如果前端需要在一个表单里面插入或者修改多个表,我们可以这样做:

如果前端需要将学生和老师的信息一起打包传到后端,你可以扩展现有的Spring Boot 应用程序,使其能够接收包含学生和老师信息的表单数据。以下是如何修改现有的示例代码以支持这种功能:

前端数据结构:前端需要将学生和老师的信息打包成一个结构,并以JSON格式发送到后端。例如:

{
    "student": {
        "id": "123",
        "name": "Alice",
        "age": 20,
        "sex": "Female"
    },
    "teacher": {
        "name": "Mr. Smith",
        "position": "Math Teacher",
        "teachingExperience": 10
    }
}

后端处理:修改后端的控制器,以接收包含学生和老师信息的请求体,并分别处理学生和老师信息的新增或更新操作。

// Endpoint to add or update student and teacher information together
@PostMapping("/addStudentTeacher")
public String addOrUpdateStudentAndTeacher(@RequestBody StudentTeacherForm form) {
    // Update or add student
    Student student = form.getStudent();
    boolean studentExists = students.stream().anyMatch(s -> s.getId().equals(student.getId()));

    if (studentExists) {
        students.stream()
                .filter(s -> s.getId().equals(student.getId()))
                .forEach(s -> {
                    s.setName(student.getName());
                    s.setAge(student.getAge());
                    s.setSex(student.getSex());
                });
    } else {
        students.add(student);
    }

    // Update or add teacher
    Teacher teacher = form.getTeacher();
    boolean teacherExists = teachers.stream().anyMatch(t -> t.getName().equals(teacher.getName()));

    if (teacherExists) {
        teachers.stream()
                .filter(t -> t.getName().equals(teacher.getName()))
                .forEach(t -> {
                    t.setPosition(teacher.getPosition());
                    t.setTeachingExperience(teacher.getTeachingExperience());
                });
    } else {
        teachers.add(teacher);
    }

    return "Student and Teacher information updated or added successfully.";
}

// Form class to wrap student and teacher information
static class StudentTeacherForm {
    private Student student;
    private Teacher teacher;

    // Getters and setters
    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
}

表单处理:在前端,确保表单可以将学生和老师的信息合并成一个JSON对象,并通过POST请求发送到/api/addStudentTeacher端点。

通过这种方式,你可以实现将学生和老师的信息一起更新或新增到后端数据库。记得根据实际情况添加数据验证、异常处理和安全性措施,以确保应用程序的稳定性和安全性。
StudentTeacherForm 类是为了方便处理前端发送的包含学生和老师信息的请求而设计的,它通过两个属性 student 和 teacher 分别表示学生和老师的信息。

二、按F12然后查看cook中的接口

1 查看请求方式

在这里插入图片描述

2 查看封装的属性、状态值等信息

在这里插入图片描述

在这里插入图片描述

三、数据库各种查询(黑马):示例和代码

1 多对多

在这里插入图片描述

2 一对一

在这里插入图片描述

3 如果我们直接查询两张表会出现迪卡效应(把两张表进行乘机配对)

在这里插入图片描述

4 通过两个id来查询两个表

在这里插入图片描述

5 多表查询的概述:

在这里插入图片描述

6 内连接(查询公共字段)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 外连接(左、右连接):(查询左、右边的数据库和公共的部分)

在这里插入图片描述
在这里插入图片描述

8 自连接(把一个表,通过别名弄成两个表,来查询自己表的数据)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

9 自连接+左连接

在这里插入图片描述

10 联合查询 union all全部合并,union 去重后合并

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

11 子查询(嵌套查询)

在这里插入图片描述

12 标量子查询(先查询出一个,然后其他表通过这一个作为条件继续查)

在这里插入图片描述
在这里插入图片描述

13 列子查询(先查出一列的数据,然后被用作条件查询)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14 行子查询(查出一行,作为其他查询的条件)

在这里插入图片描述

15 表子查询(查出一个表,作为其他查询的条件)

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文翻译 | (TAKE A STEP BACK) 后退一步:在大型语言模型中通过抽象来调用推理

摘要 我们介绍了STEP-BACK提示,这是一种简单的提示技术,使LLM能够进行抽象,从而从包含特定细节的实例中派生高级概念和第一原则。使用概念和原则来指导推理,LLM显着提高了他们遵循正确推理路径的能力。我们使用PaLM-2L、GPT-4和Ll…

3102.力扣每日一题7/9 Java(TreeMap)

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 TreeMap详解 解题思路 解题方法 时间复杂度 空间复杂度 Code T…

imx6ull/linux应用编程学习(16)emqx ,mqtt创建连接mqtt.fx

在很多项目中都需要自己的私人服务器,以保证数据的隐私性,这里我用的是emqx。 1.进入emqx官网 EMQX:用于物联网、车联网和工业物联网的企业级 MQTT 平台 点击试用cloud 申请成功后可得:(右边的忽略) 进入…

【读点论文】ASAM: Boosting Segment Anything Model with Adversarial Tuning,对抗学习提升性能

ASAM: Boosting Segment Anything Model with Adversarial Tuning Abstract 在不断发展的计算机视觉领域,基础模型已成为关键工具,对各种任务表现出卓越的适应性。其中,Meta AI 的 Segment Anything Model (SAM) 在图像分割方面表现突出。然…

国内从事人机交互的团队——浙江工业大学

一、背景 当我们选择一个新的课题后,需要清楚的了解从事该方向的团队都有哪些,这样可以及时跟踪和学习大牛团队的最新进展,以免自己认为的good idea,其实早就已经研究过了。 随着人形机器人的发展,机器人不仅需要在无…

vscode使用Git的常用操作

主打一个实用 查看此篇之前请先保证电脑安装了Git,安装教程很多,可自行搜索 一.初始化本地仓库🟢 使用vscode打开项目文件夹如图所使初始化仓库,相当于命令行的git init 二.提交到暂存区🟢 三.提交到新版本&#x1f…

python04——类(基础new)

类其实也是一种封装的思想,类就是把变量、方法等封装在一起,然后可以通过不同的实例化对其进行调用操作。 1.类的定义 class 类名: 变量a def __init__ (self,参数2,参数2...):初始化函数!!&…

Chromium编译指南2024 Linux篇-编译Chromium(五)

1.引言 在完成环境配置之后,我们需要开始实际的编译工作。编译 Chromium 是一个相对复杂且耗时的过程,尤其是第一次编译时。为了保证顺利完成,我们将使用 GN 和 Ninja 工具来生成和管理构建文件。接下来,我们会详细介绍如何生成构…

最新 Kubernetes 集群部署 + flannel 网络插件(保姆级教程,最新 K8S 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

【HarmonyOS】关于官方推荐的组件级路由Navigation的心得体会

前言 最近因为之前的630版本有点忙,导致断更了几天,现在再补上。换换脑子。 目前内测系统的华为应用市场,各种顶级APP陆续都放出来beta版本了,大体上都完成了主流程的开发。欣欣向荣的气息。 学习思路 关于学习HarmonyOS的问题…

浅谈化工厂环保管理的痛点、智慧环保的必要性及EHS系统的实现路径

在全球环保意识日益增强的背景下,化工厂作为工业领域的重要组成部分,其环保管理显得尤为重要。然而,化工厂在追求经济效益的同时,也面临着诸多环保管理的痛点。本文将围绕化工厂环保管理的痛点、化工厂为何需要智慧环保以及如何借…

Unity【入门】场景切换和游戏退出及准备

1、必备知识点场景切换和游戏退出 文章目录 1、必备知识点场景切换和游戏退出1、场景切换2、鼠标隐藏锁定相关3、随机数和自带委托4、模型资源的导入1、模型由什么构成2、Unity支持的模型格式3、如何指导美术同学导出模型4、学习阶段在哪里获取模型资源 2、小项目准备工作需求分…

小程序内容管理系统设计

设计一个小程序内容管理系统(CMS)时,需要考虑以下几个关键方面来确保其功能完善、用户友好且高效: 1. 需求分析 目标用户:明确你的目标用户群体,比如企业、媒体、个人博主等,这将决定系统的功…

Linux基础知识(十六)shell脚本编程

一、简介 用户通过shell向计算机发送指令计算机通过shell给用户返回指令的执行结果 1.1 通过shell编程可以达到的效果 提高工作效率可以实现自动化 1.2 需要学习的内容 Linuxshell的语法规范 1.3 编写shell的流程 第一步:用vi/vim创建一个.sh的文件第二步&am…

C++ 重载运算符 addition (+), subtraction (-) and multiplication (*)

C 重载运算符 addition , subtraction - and multiplication * 1. Operator Overloading (运算符重载)2. Developing an Operator Overloading Example2.1. Adding an Addition Operator (添加加法运算符)2.2. Overloading Restrictions (重载限制)2.3. 重载运算符 - 和 * Refe…

特征融合篇 | YOLOv10改进之在Neck网络中添加加权双向特征金字塔BiFPN

前言:Hello大家好,我是小哥谈。在计算机视觉任务中,特征金字塔网络(FPN)是一种常用的方法,它通过构建不同尺度的特征图来捕获不同尺度的目标。然而,传统的FPN存在一些缺点,如特征融合…

05STM32EXIT外部中断中断系统

STM32EXIT外部中断&中断系统 中断系统中断触发条件:中断处理流程和用途: STM32中断NVIC嵌套中断向量控制器基本结构 中断系统 中断触发条件: 对外部中断来说,可以是引脚发生了电平跳变 对定时器来说,可以是定时的…

【最强八股文 -- 计算机网络】【快速版】WWW 构建技术 (3 项)

1.HTML(HyperText Markup Language):作为页面的文本标记语言 2.HTTP(HyperTextTransfer Protocol):文档传递协议 3.URL(Uniform Resource Locator):指定文档所在地址 HTTPS 和 HTTP 的区别: HTTP: 以明文的方式在网络中传输数据,HTTPS 解决了HTTP 不安全的缺陷&…

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架,用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用,并与ASP.NET Core生态系统完美…

matlab仿真 模拟调制(上)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书) 1.幅度调制 clear all ts0.0025; %信号抽样时间间隔 t0:ts:10-ts;%时间矢量 fs1/ts;%抽样频率 dffs/length(t); %fft的频率分…