javaweb学习week2

javaweb学习

三.请求响应

6.日期参数

日期参数:使用@DateTimeFormat注解完成日期参数格式转换
请添加图片描述

7.json参数

JSON参数:JSON数据键名与形参属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识
请添加图片描述

8.路径参数

路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用@PathVariable获取路径参数
请添加图片描述

9.响应-@ReponseBody

@ResponseBody
类型:方法注解、类注解
作用:Controller方法上/类上
说明:@RestController = @Controller + @ResponseBody

10.统一响应结果

图片消失了

代码实例:
请添加图片描述

常用

dom4j的依赖可以解析xml文件

四.分层解耦

1.三层架构

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据
service:业务逻辑层,处理具体的业务逻辑
dao:数据访问层(data access object)(持久层),负责素具访问操作,包括数据的增、删、改、查
请添加图片描述

2.分层解耦

内聚:软件各个模块内部的功能联系
耦合:衡量软件中各个层/模块之间的依赖、关联的程度
软件设计原则:高内聚低耦合
控制反转(IOC):对象的创建控制权由程序自身转移到外部(容器)
依赖注入(DI):容器为应用程序提供运行时,所依赖的资源,称之为依赖注入
Bean对象:IOC容器中创建、管理的对象,称之为Bean

3.IOC&DI入门

@Component:将对象交给IOC容器管理
@AutoWired:运行时,IOC容器会提供该类型的bean对象,并赋值给变量
代码实例:
请添加图片描述

4.IOC详解

Bean对象的声明:
要把某个对象交给IOC容器管理,需要在对应的类上加上如下的注解之一
请添加图片描述

注意:

  1. 声明Bean的时候,可以通过Value属性指定Bean的名字,如果没有指定,默认为类名首字母小写
  2. 使用上述四个注解都可以声明Bean,但是在springboot集成web开发中,声明控制器Bean只能写@Controller

前面声明Bean的四大注解,想要生效,还需要被组件扫描注解@ComponentScan扫描
@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包

5.DI详解

@AutoWired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误:
请添加图片描述

可以通过以下几种方案来解决:
请添加图片描述

@Resource与@Autowired区别:
@Autowired是spring框架提供的注解,而@Resource是JDK提供的注解
@Autowired默认是按照类型注入,而@Resource默认是按照名称注入

五.MySQL

1.介绍

数据库:DataBase(DB),是存储和管理数据的仓库
数据库管理系统:操作和管理数据库的大型软件
SQL:操作关系型数据库的编程语言,定义了一套操作关系数据库统一标准
数据库产品:
请添加图片描述

2.安装、配置

MySQL官方提供了两种不同的版本:商业版和社区版
官网下载地址:https://dev.mysql.com/downloads/mysql/
配置:需要配置MySQL的环境变量
初始化MySQL:以管理员身份,运行命令mysqld --initialize-insecure
注册MySQL服务:运行命令mysqld -install
启动MySQL服务:运行命令net start mysql
停止MySQL服务:net stop mysql
修改默认账号密码:mysqladmin -u root password 1234,这里的密码指的是默认管理员的密码,可以自行修改成你喜欢的
登录MySQL:mysql -u用户名(root) -p密码 [ -h数据库服务器IP地址 -P端口号 ]
企业开发使用:mysql -u用户名 -p密码 [ -h数据库服务器IP地址 -P端口号 ]

3.MySQL数据模型

关系型数据库:建立在关系模型上,由多张相互连接的二维表组成的数据库

4.SQL简介

SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准
通用语法:

  1. SQL语句可以单行或多行书写,以分号结尾
  2. SQL语句可以使用空格/缩进来增强语句的可读性
  3. MySQL数据库的SQL语句不区分大小写
  4. 注释:单行:–注释内容 或 # 注释内容(MySQL特有),多行注释/* 注释内容 */

SQL语句通常被分为四大类:
请添加图片描述

5.DDL-数据库操作

DDL:数据定义语言,用来定义数据库对象(数据库、表对象)
查询:

  1. 查询所有数据库:show databases;
  2. 查询当前数据库:select database();

使用:

  1. use 数据库名;

创建:

  1. 创建数据库:create database[ if not exists] 数据库名;

删除:

  1. 删除数据库:drop database[ if not exists] 数据库名;

注意:上述语法中的database,也可以换成schema

6.DDL-图形化工具

图片消失了

注意:idea内置了datagrip,但是需要先下载驱动
请添加图片描述

7.DDL-表结构创建

创建:

create table 表名(
  字段1 字段类型 [约束] [comment 字段1注释],
  ...
  字段n 字段类型 [约束] [comment 字段n注释],
)[comment 表注释];

字段类型varchar、char(n)表示字符串的最大长度
约束:作用于字段上的规则,用于限制存储在表中的数据
请添加图片描述

8.字段类型

字段类型很多,主要分为三类:数值类型、字符串类型、日期类型
数值类型:
请添加图片描述

注意:默认有符号,后面加unsigned表示为无符号
字符串类型:
请添加图片描述

注意:char(n)不管字符长度,都占用n个字符空间,性能高但浪费空间,varchar(n)按照实际长度存储,性能低但节省空间
日期类型:
请添加图片描述

注意:一般图表都有create_time和update_time这两个字段

9.查询和修改和删除

查询:
请添加图片描述

修改:
请添加图片描述

删除:
请添加图片描述

注意:日常中一般不写这些代码,而是直接用图形化界面工具

10.DML-insert

insert语法:
请添加图片描述

MySQL内置了一个函数now(),可以获取当前时间
注意:

  1. 插入数据时,指定的字段顺序需要与值的顺序一一对应
  2. 字符串和日期型数据应该包含在引号中
  3. 插入的数据大小,应该在字段的规定范围内

11.DML—update

update语法:
修改数据:update 表名 set 字段名1 = 值1, 字段名2 = 值2, …[ where 条件 ];

12.DML-delete

delete语法:
删除数据:delete from 表名 [ where 条件 ];
注意:

  1. delete语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
  2. delete语句不能删除某一个字段的值(如果要操作,可以使用update,将该字段的值置为null)

13.DQL-基本查询

关键字:select
语法:
请添加图片描述

注意:开发中查询所有字段一般不用通配符,而是把所有字段罗列出来,因为通配符不直观且性能低

14.DQL-条件查询

条件查询:select 字段1, 字段2, … from 表名 where 条件1 逻辑运算符 条件2 逻辑运算符 …;
条件中可以用的运算符:
请添加图片描述

15.DQL-聚合函数

介绍:将一列数据作为一个整体,进行纵向计算
语法:select 聚合函数(字段列表) from 表名;
聚合函数:
请添加图片描述

注意:

  1. null值不参与所有聚合函数运算
  2. 同级数量可以用:count(*)、count(字段)、count(常量),推荐使用count(*)

16.DQL-分组查询

语法:select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
如:select job,count(*) from tb_tmp where entrydate <= ‘1111-11-11’ group by job having count(*) >=2;
where和having的区别:

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤
  2. 判断条件不同:where不能对聚合函数进行判断。而having可以

注意:

  1. 分组之后,查询的字段一般为聚合函数和分组字段,查询其它字段无任何意义
  2. 执行顺序:where>聚合函数>having

17.排序查询

语法:
请添加图片描述

排序方式:ASC:升序(默认),DESC:降序
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

18.分页查询

语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:

  1. 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数
  2. 分页查询是数据库的方言,不同的数据库有不同的实现
  3. 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10

MYSQL中有流程控制函数:

IF(condition, value_if_true, value_if_false) 

condition 是一个条件表达式,如果为真则返回value_if_true,否则返回value_if_false
value_if_true 是在condition为真时返回的值
value_if_false 是在condition为假时返回的值
如:

SELECT name, IF(age > 18, 'Adult', 'Minor') AS age_group
FROM people;

上面的查询将根据age字段的值返回不同的年龄组标签,如果age大于18,则返回’Adult’,否则返回’Minor’
流程控制函数:

CASE
    表达式
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

condition1, condition2等是条件表达式,用于检查不同的情况
result1, result2等是在满足相应条件时要返回的结果
default_result是在所有条件都不满足时返回的默认结果
如:

SELECT
    name,
    CASE
        WHEN age < 18 THEN 'Minor'
        WHEN age BETWEEN 18 AND 65 THEN 'Adult'
        ELSE 'Senior'
    END AS age_group
FROM people;

这个查询将根据age字段的不同取值返回不同的年龄组标签

19.多表设计

(1)一对多

一对多实现:在数据库表中多的一方,添加字段,来关联一的一方的主键
有点类似于链表
如:
请添加图片描述

(2)一对多-外键

问题:数据的一致性和完整性可能会被破坏,改一个数据,需要动多个表
外键语法:
请添加图片描述

实际开发中一般用图形化工具操作
物理外键:
概念:使用foreign key定义外键关联另一张表
缺点:
请添加图片描述

逻辑外键:
概念:在业务逻辑中,解决外键关联
通过逻辑外键,就可以解决上述问题

(3)一对一

一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其它字段放在另一张表中,提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的
如:
请添加图片描述

(4)多对多

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
如:
请添加图片描述

20.多表查询

(1)概述

多表查询:指从多张表当中查询
笛卡尔积:指在数学中,两个集合的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)
分类:
请添加图片描述

(2)内连接

语法:
请添加图片描述

(3)外连接

语法:
请添加图片描述

左外连接会返回左表中的所有行以及右表中与之匹配的行
右外连接则相反,返回右表中的所有行以及左表中与之匹配的行

(4)子查询概述

介绍:sql语句中嵌套select语句,称为嵌套查询,又称子查询
形式:select * from t1 where column = (select column1 from t2 …);
子查询外部的语句可以是insert/update/delete/select的任何一个,最常见的是select
分类:
请添加图片描述

(5)标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
常用的操作符:= <> >= < <=
如:

SELECT 
    student_name, 
    (SELECT MAX(grade) FROM grades WHERE student_id = students.id) AS highest_grade 
FROM 
    students;

在这个例子中,子查询 (SELECT MAX(grade) FROM grades WHERE student_id = students.id) 返回了每个学生的最高分数,并将其作为 highest_grade 列返回给主查询结果

(6)列子查询

子查询返回的值是一列(可以是多行)
常用的操作符:in、not in等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值