Javaweb(二)

目录

数据库

Mysql概述

Mysql连接

MySQL-企业开发使用方式

数据模型

SQL简介

数据库设计-DDL

数据库操作

表操作

数据库操作-DML

数据库操作-DQL

多表设计

一对多(多对一)

一对一

多对多​编辑

多表查询

内连接

外连接

子查询

案例​编辑

事务

操作

四大特性

索引

结构

语法

Mybatis

使用Mybatis查询所有用户数据

配置SQL提示

JDBC介绍

数据库连接池

Lombok

Mybatis基础操作

删除

根据主键删除

日志输出

预编译SQL

SQL注入

参数占位符

新增

​编辑

更新

查询

数据封装

查询(条件查询)

参数名说明

XML映射文件

Mybatis动态SQL

会话技术

会话跟踪方案对比

令牌技术

JWT

过滤器(Filter)

Filter执行流程

登录校验Filter

拦截器(Interceptor)

拦截器-拦截路径

登录校验Interceptor

事务管理

Spring事务管理

事务属性-回滚

事务属性-传播行为

AOP

AOP核心概念

AOP执行流程

AOP进阶

通知类型

通知顺序

切入点表达式

连接点

spring boot原理篇

配置优先级

bean管理

bean作用域

第三方bean

spring boot原理

Maven高级

分模块设计

继承与聚合

继承

聚合

私服

资源上传与下载


数据库

数据库: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查询语句。

  1. 查询价格低于 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文件中
聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

私服

资源上传与下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值