type
status
date
slug
summary
tags
category
icon
password
参考课程:
【黑马程序员 JavaWeb开发教程】
@ZZHow(ZZHow1024)
多表查询
- 概述
- 多表查询:指从多张表中查询数据。
- 笛卡尔积:笛卡尔乘积是指在数学中,两个集合(A 集合 和 B 集合)的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)
- 分类
- 连接查询
- 内连接:相当于查询 A、B 交集部分数据
- 外连接
- 左外连接:查询左表所有数据(包括两张表交集部分数据)
- 右外连接:查询右表所有数据(包括两张表交集部分数据)
- 子查询
- 内连接
- 隐式内连接:
- 显式内连接:
select 字段列表 from 表1, 表2 where 条件 …;
select 字段列表 from 表1 [inner] join 表2 on 连接条件 …;
- 外连接
- 左外连接(优先使用):
- 右外连接:
select 字段列表 from 表1 left [outer] join 表2 on 连接条件 …;
select 字段列表 from 表1 right [outer] join 表2 on 连接条件 …;
- 子查询
- 概述
- 介绍:SQL 语句中嵌套 select 语句,称为嵌套查询,又称子查询。
- 形式:select * from t1 where column1 = (select column1 from t2 …);
- 子查询外部的语句可以是 insert / update / delete / select 的任何一个,最常见的是 select。
- 分类
- 标量子查询:子查询返回的结果为单个值。
- 列子查询:子查询返回的结果为一列。
- 行子查询:子查询返回的结果为一行。
- 表子查询:子查询返回的结果为多行多列。
- 标量自查询
- 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式。
- 常用的操作符:=、<>、!=、>、>=、<、<=。
- 列自查询
- 子查询返回的结果是一列(可以是多行)。
- 常用的操作符:in、not in 等。
- 行子查询
- 子查询返回的结果是一行(可以是多列)。
- 常用的操作符:=、<>、!=、in、not in。
- 表子查询
- 子查询返回的结果是多行多列,常作为临时表。
- 常用的操作符:in。
事务
- 介绍
- 概念:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为订个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
注意事项
默认 MySQL 的事务是自动提交的,也就是说,当执行一条 DML 语句,MySQL 会立即隐式的提交事务。
- 操作
- 开启事务:
- 提交事务:
- 回滚事务:
start transaction; / begin;
commit;
rollback;
- 四大特性(ACID)
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
事务是不可分割的最小单元,要么全部成功,要么全部失败。
事务完成时,必须使所有的数据都保持一致状态。
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
数据库优化-索引
- 介绍
- 概念
- 索引(index)是帮助数据库高效获取数据的数据结构。
- 优缺点
- 优点
- 提高数据查询的效率,降低数据库的 IO 成本。
- 通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 消耗。
- 缺点
- 索引会占用存储空间。
- 索引大大提高了查询效率,同时却也降低了 insert、update、delete 的效率。
- 结构
- MySQL 数据库支持的索引结构有很多,如:Hash 索引、B+Tree 索引、Full-Text 索引等。我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引。
- B+Tree(多路平衡搜索树)
- 每一个节点,可以存储多个 key(有 n 个 key,就有 n 个指针)。
- 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。
- 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询。
- 语法
- 创建索引:
- 查看索引:
- 删除索引:
create [unique] index 索引名 on 表名 (字段名, …);
show index from 表名;
drop index 索引名 on 表名;
- 案例
注意事项
- 主键字段,在建表时,会自动创建主键索引。
- 添加唯一约束时,数据库实际上会添加唯一索引。
MyBatis入门
- 简介
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 的开发。
- MyBatis 本是 Apache 的一个开源项目 iBatis,2010 年这个项目由 Apache 迁移到了 Google code,并且改名为 MyBatis。2013 年 11 月迁移到 Github。
- 官网:
- 快速入门
- 准备工作(创建 SpringBoot 工程、数据库表 user、实体类 User)。
- 引入 MyBatis 的相关依赖,配置 MyBatis(数据库连接信息)。
- 依赖:
- MyBatis Framework
- MySQL Driver
- 在 application.properties 中配置 MyBatis
- 编写 SQL 语句(注解 / XML)。
- 配置 IntelliJ IDEA 的 SQL 语句提示
- 选中 SQL 语句 - 右键单击 - Show Context Actions - Inject language or reference - MySQL(SQL)
- 右侧边栏单击“Database” - 单击“+” - Data Source - MySQL - 配置相关信息
JDBC简介
- JDBC(Java DataBase Connectivity),就是使用 Java 语言操作关系型数据库的一套 API。
- 本质
- SUN 公司官方定义的一套操作所有关系型数据库的规范,即接口。
- 各个数据库厂商去实现这套接口,提供数据库驱动 JAR 包。
- 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 JAR 包中的实现类。
- 弊端
- 硬编码
- 繁琐
- 资源浪费造成性能降低
数据库连接池
- 简介
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)。
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
- 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。
- 优势
- 资源重用。
- 提升系统响应速度。
- 避免数据库连接遗漏。
- 标准接口:DataSource
- 官方(SUN)提供的数据库连接池接口,由第三方组织实现此接口。
- 功能:获取连接
Connection getConnection() throws SQLException;
- 常见产品
- C3PO
- DBCP
- Druid(德鲁伊)
- Druid 连接池是阿里巴巴开源的数据库连接池项目
- 功能强大,性能优秀,是 Java 语言最好的数据库连接池之一
- Hikari(SpringBoot 默认)
- 切换 SpringBoot 的数据库连接池为 Druid 数据库连接池
- 官网:
在 pom.xml 中配置 Maven 坐标
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 修饰的字段之外带有各参数的构造方法 |
- Maven 坐标
注意事项
Lombok 会在编译时,自动生成对应的 Java 代码。在使用 Lombok 时,还需要安装 Lombok 的插件(IntelliJ IDEA 自带)。