【Day 8】MySQL 多表查询 + Mybatis 基础

 1 多表查询

笛卡尔积:在数学中,两个集合(A集合 和 B集合)的所有组合情况

在多表查询时,需要消除无效的笛卡尔积

select * from tb_emp,tb_dept where dept_id = tb_dept.id;

多表查询分为:

  • 连接查询

内连接:相当于查询A、B交集部分数据

外连接:

        1)左外连接:查询左表所有数据(包括两张表交集部分数据)

        2)右外链接:查询右表所有数据(包括两张表交集部分数据)

  • 子查询

1.1 内连接

  • 隐式内连接

select 字段列表 from 表1, 表2 where 条件...;

  • 显式内连接

select 字段列表 from 表1 [inner] join 表2 on 链接条件...;

1.2 外连接

  • 左外连接

select 字段列表 from 表1 left [outer] join 表2 on 链接条件;

  • 右外链接

select 字段列表 from 表1 right [outer] join 表2 on 链接条件;

1.3 子查询

子查询(嵌套查询):SQL 语句中嵌套 select 语句

select * from t1 where column1 = (select column1 from t2...)

分类

  • 标量子查询:子查询返回的结果为单个值
  • 列子查询:子查询返回的结果为一列
  • 行子查询:子查询返回的结果为一行
  • 表子查询:子查询返回的结果为多行多列

标量子查询:

列子查询

行子查询

表子查询

2 事务

背景:员工属于部门,当某个部门删除,员工也要删除,如果员工在删除时,失败,此时出现表结构不一致

事务:是一组操作的集合,它是一个不可分割的工作单位

事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

注:默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务

MySQL 的事务控制:

  • 开启事务:start transaction; / begin;
  • 提交事务:commit;
  • 回滚事务:rollback;

2.1 事务的四大特性

 3 索引

索引(index)是帮助数据库高效获取数据的数据结构

优点:

  • 提高数据查询的效率,降低数据库的 IO 成本
  • 通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 消耗

缺点:

  • 索引会占用存储空间
  • 索引大大提高了查询效率,同时却也降低了 insert、update、delete 的效率

结构

创建索引

create [unique] index 索引名 on 表名(字段名,...);

查看索引

show index from 表名;

删除索引

drop index 索引名 on 表名;

 

4 Mybatis

MyBatis 是一款优秀的 持久层 框架,用于简化 JDBC 的开发

官网:MyBatis中文网

4.1 Mybatis 入门程序

第一步

创建 springboot 工程,User 表(在 pojo 里面),数据库表 mybatis

第二步

配置数据库的链接信息,注意,数据库的名字 mybatis

配置四要素

 

第三步

 单元测试:

4.2 配置 SQL 提示 

但是此时 user 识别不出来,原因是 IDEA 没有与数据库建立链接

建立链接:

4.3 JDBC

JDBC(JavaDataBase Connectivity),使用 Java 语言操作关系型数据库的 API

  • sun公司官方定义的一套操作所有关系型数据库的规范,即接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动 jar 包
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

​​​​​​​

                                 ↓

4.4 数据库连接池

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
  • 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优点:

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏

官方(sun 公司)提供的数据库连接池接口,由第三方组织实现此接口

功能:获取链接

常见产品:

  • C3P0
  • DBCP
  • Druid(阿里巴巴)
  • Hikari(springboot 默认)

切换连接池:

4.5 Lombok

之前的 User 类代码太多

 使用 lombok

 

        Lombok 是一个实用的 Java 类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、tostring等方法,并可以自动化生成日志变量,简化 Java 开发、提高效率

注解作用
@Getter/Setter

为所有属性提供 get/set 方法

@ToString给类生成 toString 方法
@EqualsAndHashCode根据类所拥有的非静态字段自动重写 equals 方法和 hashCode 方法
@Data

提供了更综合的生成代码功能

(@Getter + @Setter + @ToString + @EqualsAndHashCode)

@NoArgsConstructor为实体类生成无参构造器方法
@AllArgsConstructor为实体类生成除了 static 修饰的字段之外带有各参数的构造器方法

添加 lombok 依赖:

 

然后在 User 里面

@Data // @Getter + @Setter + @ToString + @EqualsAndHashCode
@NoArgsConstructor // 无参构造
@AllArgsConstructor // 有参构造
public class User {private Integer id;private String name;private Short age;private Short gender;private String phone;
}

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

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

相关文章

FTP与SMB深度对比:文件传输协议谁更胜一筹?

在数字化时代,文件传输已成为日常工作中不可或缺的一部分。 FTP(文件传输协议)和SMB(服务器消息块)是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点,但同时也存在一些差异。 今…

【Linux】动态库与静态库

文章目录 1. 认识静态库与动态库2. 手动创建并测试静态库2.1 生成静态库2.2 打包静态库2.3 使用静态库 3. 库搜索路径4. 手动创建并测试动态库4.1 生成动态库4.2 打包动态库4.3 使用动态库 5. 动静态库优先级 1. 认识静态库与动态库 静态库(.a)&#xf…

基于深度学习网络的十二生肖图像分类matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................... for i 1:16subplot(4,4,…

真的通俗易懂!差分信号电路的解读

目录 一、什么是差分运放电路 二、差分运放电路的工作状态 一、什么是差分运放电路 差分电路是具有对共模信号抑制,对差模信号放大特征的电路。该电路的两个信号输信号的差值是该电路的有效值。将这两信号输入只差进行放大后输出。如果存在干扰信号,会…

H264 编码标准常见术语解释

H264 编码标准 H.264编码标准,也被称作MPEG-4 AVC(Advanced Video Coding),是一种被广泛使用的数字视频压缩标准,由国际电信联盟(ITU-T)和国际标准化组织(ISO)共同开发。…

如何确定IP地址的地理位置

IP地址的地理位置确定是一个复杂而精细的过程,它结合了多种技术与方法来推断或确定设备在网络中的大致物理位置。以下是对IP地址地理位置确定过程的详细解释: 首先,我们要理解IP地址本身并不能直接反映物理位置信息。IP地址主要是用于在网络中…

vscode将本地服务转发到外网地址访问

示例中将本地的5500端口,用vscode进行端口转发,在外网地址访问服务 要转发的端口 转发端口 点击转发端口 输入要转发的端口,按下回车 Enter 点击允许,弹出确认界面后点击打开 转发端口已经成功配置上,右键可见性…

栈和队列-介绍与实现(超级!!!详解-C语言)

目录 栈 栈的介绍 栈的概念 栈的结构 栈的实现 初始化栈 StackInit 销毁栈 StackDestroy 入栈 StackPush 出栈 StackPop 获取栈顶元素 StackTop 检查栈是否为空 StackEmpty 获取栈中有效元素个数 StackSize 队列 队列的介绍 队列的概念 队列的结构 队列的应用 队列的实现 …

建议收藏!网络安全入门知识汇总,自学必看!

计算机网络的广泛应用,为人们的生产、生活、工作、娱乐带来了方便,同时由于技术原因和人为因素,也为人们带来诸多安全隐患。这催发出一个新的职业——网络安全工程师。 目前网络安全工程师变得越来越重要,很多人也开始对网络安全…

jsp实验11 JavaBean

二、实验项目内容(实验题目) 编写代码,掌握javabean的用法。【参考课本 上机实验 5.5.2 】 三、源代码以及执行结果截图: 源代码: Memory.java package sea.water; import java.util.ArrayList; import java.util…

280 Stylized Desert Beach Textures - Sand Cracked Sand Water More v1.1.0

280多种风格化的沙子、破裂的沙子、土壤、沙质岩石和其他沙质纹理的集合,用于沙漠和海滩风格化/幻想/rpg风格的游戏环境。 这款由game Buffs设计的280多种风格化沙漠和海滩纹理系列,为您的游戏锦上添花! 在这个系列中,你会在风格化/幻想/rpg风格的游戏中找到大量适合沙漠、…

python与上位机开发day02

1.常见运算符 1.1 赋值运算符 赋值运算符主要用来对变量进行赋值,包括如下这些: 运算符描述赋值加等于-减等于*乘等于/除等于//整除等于%模等于**幂等于 实例如下: a 10 a 5 # 等价于 a a5 a *2 # 等价于 a a*21.2 比较运算符 比较运算符主要用来比较两个数据的大小…

树莓派驱动开发----iic驱动oled屏幕篇

水一期吧,上效果 有点模糊,我直接说吧,修改设备树,iic1,地址0x3c,然后编写驱动文件,app文件,挂载驱动模块后在终端输入 /*******************************************************…

Ventus(承影):基于RISC V的开源GPGPU

Ventus(承影):基于RVV的开源GPGPU 清华大学集成电路学院dsp-lab的承影RVV GPGPU设计文档。 整体目标 提供一个开源的基于RVV的GPGPU实现方案,并给出软件映射方案、指令集(支持的指令及特性、添加的自定义指令&#xf…

经典的目标检测算法有哪些?

一、经典的目标检测算法有哪些? 目标检测算法根据其处理流程可以分为两大类:One-Stage(单阶段)算法和Two-Stage(两阶段)算法。以下是一些经典的目标检测算法: 单阶段算法: YOLO (You Only Loo…

iOS ------代理 分类 拓展

代理协议 一,概念: 代理,又称委托代理(delegate),是iOS中常用的一种设计模式。顾名思义,它是把某个对象要做的事委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理…

图书租赁系统-借阅图书

图中展示了所有可以借阅的图书&#xff0c;点击“借阅”按钮便可以借阅图书。 借阅成功后&#xff0c;可以到bookorder菜单中阅读该书。 阅读功能待开发。 add.html借阅图书页面 <!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org…

学习经验分享【33】YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 / RTDETR 基于 Pyside6 的图形化界面

大论文可以写两章关于算法创新模型&#xff0c;最后一章可以写对前两章提出方法进行封装&#xff0c;利用PyQT5搭建YOLOv5可视化界面&#xff0c;并打包成exe程序&#xff0c;构建检测平台实现简单的应用。用来凑大论文的字数和工作量&#xff0c;是简单又快速的方法&#xff0…

如何使用国内手机号免费注册一个美区 Apple ID?

因为一些众所周知的原因&#xff0c;在国内使用 iPhone 是被阉割过的&#xff0c;如果想要用完全版就需要用到美区账号&#xff0c;废话不多说直接上图。 在 iPhone 的浏览器上打开链接进行注册 https://appleid.apple.com/account 如果注册提示&#xff1a;Your request cou…

SpringCloud注册nacos错误:Could not resolvplaceholder ‘xxxxx‘ in value “xxxx“

这个错误是我在做spirngcloud注册服务到nacos时发现的&#xff0c;算是折磨我折磨了好久&#xff0c;最后发现了还是先记录一下&#xff0c;首先还是说一下我的项目版本信息&#xff0c;因为不同的版本就有这不同的解决方案&#xff0c;这也是最恶心的一点&#xff0c;以至于我…