JavaWeb开发_Day08
2024-7-22
| 2024-7-24
0  |  阅读时长 0 分钟
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(多路平衡搜索树)
      • B+Tree
        B+Tree
      • 每一个节点,可以存储多个 key(有 n 个 key,就有 n 个指针)。
      • 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。
      • 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询。
  • 语法
    • 创建索引:
      • create [unique] index 索引名 on 表名 (字段名, …);
    • 查看索引:
      • show index from 表名;
    • 删除索引:
      • drop index 索引名 on 表名;
  • 案例
    💡
    注意事项
    • 主键字段,在建表时,会自动创建主键索引。
    • 添加唯一约束时,数据库实际上会添加唯一索引。

    MyBatis入门

    • 简介
      • MyBatis_Logo
        MyBatis_Logo
        MyBatis 是一款优秀的持久层框架,用于简化 JDBC 的开发。
    • MyBatis 本是 Apache 的一个开源项目 iBatis,2010 年这个项目由 Apache 迁移到了 Google code,并且改名为 MyBatis。2013 年 11 月迁移到 Github。
    • 快速入门
        1. 准备工作(创建 SpringBoot 工程、数据库表 user、实体类 User)。
        1. 引入 MyBatis 的相关依赖,配置 MyBatis(数据库连接信息)。
          1. 依赖:
              • MyBatis Framework
              • MySQL Driver
          2. 在 application.properties 中配置 MyBatis
          1. 编写 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。
        • JDBC
          JDBC
      • 本质
        • SUN 公司官方定义的一套操作所有关系型数据库的规范,即接口。
        • 各个数据库厂商去实现这套接口,提供数据库驱动 JAR 包。
        • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 JAR 包中的实现类。
      • 弊端
        • 硬编码
        • 繁琐
        • 资源浪费造成性能降低

      数据库连接池

      • 简介
        • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)。
        • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
        • 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。
      • 优势
        • 资源重用。
        • 提升系统响应速度。
        • 避免数据库连接遗漏。
      • 标准接口:DataSource
        • 官方(SUN)提供的数据库连接池接口,由第三方组织实现此接口。
        • 功能:获取连接 Connection getConnection() throws SQLException;
      • 常见产品
        • C3PO
        • DBCP
        • Druid(德鲁伊)
          • Druid 连接池是阿里巴巴开源的数据库连接池项目
          • 功能强大,性能优秀,是 Java 语言最好的数据库连接池之一
        • Hikari(SpringBoot 默认)

      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 自带)。
      • Java
      • JavaWeb
      • 学技术
      • JavaWeb开发_Day09JavaWeb开发_Day07
        Loading...
        目录