【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;
}

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值