目录
数据库
数据库:DataBase(DB),是存储和管理数据的仓库。
数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。
SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
数据库产品


Mysql概述

https://dev.mysql.com/downloads/mysql/

Mysql连接

MySQL-企业开发使用方式

数据模型


SQL简介



数据库设计-DDL
DDL 英文全称是 Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表)。
数据库操作



表操作






数据库操作-DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。




数据库操作-DQL
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
关键字:SELECT

DQL-基本查询






多表设计
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
一对多(多对一)





一对一

多对多


多表查询


内连接

外连接

子查询



案例
dishes表格包含菜品的信息,如菜品ID (dish_id)、菜品名称 (dish_name)、价格 (price) 和状态 (status)。categories表格包含菜品分类的信息,如分类ID (category_id) 和分类名称 (category_name)。dish_category表格是一个关联表,它将菜品与它们所属的分类关联起来,包含菜品ID (dish_id) 和分类ID (category_id)。sets表格包含套餐的信息,如套餐ID (set_id)、套餐名称 (set_name) 和价格 (set_price)。set_dishes表格是一个关联表,它将套餐与它们包含的菜品关联起来,包含套餐ID (set_id)、菜品ID (dish_id)、份数 (quantity)。
现在,我们将根据上述表格结构来编写SQL查询语句。
- 查询价格低于 10元 的菜品的名称、价格及其菜品的分类名称:
SELECT d.dish_name, d.price, c.category_name
FROM dishes d
LEFT JOIN dish_category dc ON d.dish_id = dc.dish_id
LEFT JOIN categories c ON dc.category_id = c.category_id
WHERE d.price < 10 AND d.status = '起售';
查询所有价格在 10元(含)到50元(含)之间且状态为"起售"的菜品名称、价格及其分类名称(即使菜品没有分类也要将菜品查询出来):
SELECT d.dish_name, d.price, COALESCE(c.category_name, '无分类') AS category_name
FROM dishes d
LEFT JOIN dish_category dc ON d.dish_id = dc.dish_id
LEFT JOIN categories c ON dc.category_id = c.category_id
WHERE d.price BETWEEN 10 AND 50 AND d.status = '起售';
查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格:
SELECT c.category_name, MAX(d.price) AS max_price
FROM dishes d
JOIN dish_category dc ON d.dish_id = dc.dish_id
JOIN categories c ON dc.category_id = c.category_id
GROUP BY c.category_name;
查询各个分类下菜品状态为 "起售",并且该分类下菜品总数量大于等于3的分类名称:
SELECT c.category_name
FROM categories c
JOIN dish_category dc ON c.category_id = dc.category_id
JOIN dishes d ON dc.dish_id = d.dish_id
WHERE d.status = '起售'
GROUP BY c.category_name
HAVING COUNT(d.dish_id) >= 3;
查询出 "商务套餐A" 中包含了哪些菜品(展示出套餐名称、价格,包含的菜品名称、价格、份数):
SELECT s.set_name, s.set_price, d.dish_name, d.price, sd.quantity
FROM sets s
JOIN set_dishes sd ON s.set_id = sd.set_id
JOIN dishes d ON sd.dish_id = d.dish_id
WHERE s.set_name = '商务套餐A';
查询出低于菜品平均价格的菜品信息(展示出菜品名称、菜品价格):
SELECT d.dish_name, d.price
FROM dishes d
WHERE d.price < (SELECT AVG(price) FROM dishes);
请注意,这些SQL语句是基于假设的数据表结构编写的,并且可能需要根据实际的数据库情况进行调整。此外,在实际环境中执行这些SQL语句之前,应该确保数据库中有正确的索引以优化性能。
小结:

事务

操作

四大特性

索引


结构


语法

Mybatis


使用Mybatis查询所有用户数据





配置SQL提示


JDBC介绍



数据库连接池



小结:
数据库连接池
是一个容器,负责分配、管理数据库连接(Connection)
优势:资源复用、提升系统响应速度
接口:DataSource
产品:C3P0、DBCP、Druid、Hikari
Lombok


Mybatis基础操作


删除
根据主键删除

日志输出

预编译SQL

SQL注入

参数占位符


新增



更新

查询

数据封装


查询(条件查询)

参数名说明

XML映射文件




Mybatis动态SQL


<if>


<foreach>

<sql><include>

会话技术

会话跟踪方案对比


令牌技术

JWT








过滤器(Filter)


Filter执行流程



小结:
执行流程
请求 --> 放行前逻辑 --> 放行 --> 资源 --> 放行后逻辑
拦截路径
/login
/depts/*
/*
过滤器链
一个web应用中,配置了多个过滤器,就形成了一个过滤器链
登录校验Filter



拦截器(Interceptor)


拦截器-拦截路径

拦截器-执行流程

登录校验Interceptor


事务管理

Spring事务管理


事务属性-回滚

事务属性-传播行为



AOP



AOP核心概念

AOP执行流程

AOP进阶
通知类型

@PointCut

小结:
通知类型
@Before(前置通知)
@After(后置通知)
@Around(环绕通知,重点)
@AfterReturning(返回后通知,了解)
@AfterThrowing(异常后通知,了解)
通知顺序

切入点表达式



书写建议
所有业务方法名在命名时尽量规范,方便切入点表达式快速匹配。如:查询类方法都是 find 开头,更新类方法都是 update开头。
描述切入点方法通常基于接口描述,而不是直接描述实现类,增强拓展性。
在满足业务需要的前提下,尽量缩小切入点的匹配范围。如:包名匹配尽量不使用 ..,使用 * 匹配单个包。

小结:
execution(修饰符? 返回值 包名.类名.?方法名(参数) throws 异常?)
@annotation(注解全类名)
连接点

spring boot原理篇
配置优先级




bean管理

bean作用域


第三方bean

@Component 及衍生注解 与 @Bean注解使用场景?
项目中自定义的,使用@Component及其衍生注解
项目中引入第三方的,使用@Bean注解
spring boot原理











Maven高级
分模块设计



什么是分模块设计?
将项目按照功能拆分成若干个子模块
为什么要分模块设计?
方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
注意事项
分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
继承与聚合
继承





版本锁定



<dependencyManagement> 与 <dependencies>的区别是什么?
<dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
<dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
聚合


小结:
继承与聚合
作用
聚合用于快速构建项目
继承用于简化依赖配置、统一管理依赖
相同点:
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
私服

资源上传与下载







被折叠的 条评论
为什么被折叠?



