请求与响应概述
架构
BS架构:Browser/Server,浏览器/服务器架构模式.客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端
维护方便,体验一般
CS架构:Client/Server,客户端/服务器架构模式
开发,维护麻烦,体验不错
请求(HttpServletRequest):获取请求数据
响应(HttpServletResponse):设置响应数据
请求
Postman
是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好.无论是开发人员进行接口调试,还是测试人员做接口测试,postman都是我们的首选工具之一
简单参数
-
原始方式:在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取
-
SpringBoot方式:简单参数,请求参数名与形参变量名相同,定义形参即可接收参数
-
注意事项
@RequestParam中required属性默认为true,代表该请求参数必须传递,如果不传递将报错.如果该参数是可选的,可以将required属性设置为false
实体参数
- 简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可
- 复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
数组集合参数
- 数组:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
- 集合:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系
日期参数
- 日期参数:使用@DateTimeFormat注解完成日期参数格式转换
- 日期格式参数
@DateTimeFormat(pattern=""):写在形参中,指定日期的模式
Json参数
- JSON参数:JSON数据键名与形参对象属性名相同,定义POJO形参即可接收参数,需使用@RequestBody标识
- json的key要和pojo实体类的属性名相同
- @ResponseBody:写在形参中,表示将请求体中的json数据转换成java对象
路径参数
- 路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数
响应
响应数据
@ResponseBody
- 类型:方法注解,类注解
- 位置:Controller方法上/类上
- 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为json格式响应
- 说明:@RestController=@Controller+@ResponseBody
同一响应结果
步骤
定义Result实体类
Result (code,msg,data)
在Controller层方法中同一返回Result对象
@RequestMapping("/getAddr")
public Result getAddr(){
Address addr = new Address();
addr.setProvince("广东省");
addr.setCity("深圳市");
return Result.success(addr);
}
案例
需求
加载并解析emp.xml文件中的数据,完成数据处理,并在页面展示。
操作步骤
- 在pom.xml文件中引入dom4j的依赖,用于解析XML文件
- 引入资料中提供的解析XML的工具类XMLParserUtils,实体类Emp,XML文件emp.xml
- 引入资料中提供的静态页面文件,放在resources下的static目录下
- 编写Controller程序,处理请求,响应数据
分层解耦
三层架构
- Controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据
- Service:业务逻辑层,处理具体的业务逻辑
- Dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查
分层解耦
- 内聚:软件中各个功能模块内部的功能联系
- 耦合:衡量软件中各个层/模块之间的依赖,关联的程度
- 软件设计原则:高内聚低耦合
- 解耦
- 控制反转:Inversion Of Control,简称IOC.对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转
- 依赖注入:Dependency Injection,简称DI.容器为应用程序提供运行时,所依赖的资源,称之为依赖注入
- Bean对象:IOC容器中创建,管理的对象,称之为bean
IOC&DI入门
操作步骤
- Service层及Dao层的实现类,交给IOC容器管理
- 为Controller及Service注入运行时,依赖的对象
- 运行测试
IOC详解
Bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
@Component
声明bean的基础注解
不属于以下三类时用此注解
@Controller
@Component的衍生注解
标注在控制器类上
@Service
@Component的衍生注解
标注在业务类上
@Repository
@Component的衍生注解
标注在数据访问类上(由于与mybatis整合,用的少)
注意事项
- 使用以上注解都可以声明bean,但是在springboot集成web开发中,Controller层只能用@Controller
- 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写
Bean组件扫描
- 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
- @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解
- @SpringBootApplication中,默认扫描的范围是启动类所在包及其子包
DI详解
Bean注入
@Autowired注解,默认是按照类型进行注入,如果存在多个相同类型的bean,将会报错
通过3种方案解决
@Primary
@Qualifier @A+@Q("bean的名称")
@Resource (name="bean的名称")
@Resource与@Autowired区别
- @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解
- @Autowired默认是按照类型注入,而@Resource默认是按照名称注入
数据库
概述
- DataBase(DB),是存储和管理数据的仓库
- 数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件
- SQL:Structured Query Language,操作关系数据库的编程语言,定义了一套操作关系型数据库统一标准
数据库产品
Oracle
收费的大型数据库,Oracle公司的产品
MySQL
开源免费的中小型数据库,Sun公司收购了MySQL,Oracle收购Sun公司
SQL,Server
MicroSoft公司收费的中型数据库. C# .net等语言常使用
PostgreSQL
开源免费中小型的数据库
DB2
IBM公司的大型收费数据库产品
SQLite
嵌入式的微型数据库.如:作为Android内置数据库
MariaDB
开源免费的中小型数据库
MySQL概述
安装配置
通过命令连接MySQL服务器
mysql -u用户名 -p密码 -h主机IP地址 -P端口
数据模型
关系型数据库(RDBMS):建立在关系模型基础上,由多张互相连接的二维表组成的数据库
MySQL客户端
DataGrip是JetBrains旗下一款数据库管理工具,在IDEA中已经内置,是管理和开发MySQL,Oracle,PostgreSQL的理想解决方案
SQL简介
一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准
通用语法
- sql语句可以单行或多行书写,以分号结尾
- sql语句可以使用空格/缩进来增强语句的可读性
- MySQL数据库的sql语句不区分大小写
注释
- 单行注释:-- 注释内容或 # 注释内容
- 多行注释: /* 注释内容 */
SQL分类
DDL
Data Definition Language
数据定义语言,用来定义数据库和表
DML
Data Manipulation Language
数据操作语言,用来对数据库表中的数据进行增删改
DQL
Data Query Language
数据查询语言,用来查询数据库中表的记录
DCL
Data Control Language
数据控制语言,用来创建数据库用户,控制数据库的访问权限
数据库设计-DDL
数据库设计
查询
- 查询所有数据库:show databases;
- 查询当前数据库:select database();
使用
使用数据库:use 数据库名;
创建
创建数据库:create database [if not exists] 数据库名;
删除
删除数据库:drop database [if exists] 数据库名;
注意事项
上述语法中的database,也可以替换成schema. 如:create schema db01;
表设计
创建
create table 表名(
字段1 字段类型 [约束] [comment 字段1注释],
字段n 字段类型 [约束] [comment 字段n注释]
)[comment 表注释];
数据类型
数据类型:MySQL中的数据类型有很多,主要分三类:数值,字符串,日期
约束
概念
约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的
保证数据库中数据的正确性,有效性和完整性
约束分类
非空约束
限制该字段值不能为null
not null
唯一约束
保证字段的所有数据都是唯一,不重复的
unique
主键约束
主键是一行数据的唯一标识,要求非空且唯一
primary key [auto_increment]
默认约束
保存数据时,如果未指定该字段值,则采用默认值
default
外键约束
让两张表的数据建立连接,保证数据的一致性和完整性
注意事项
一个表有且仅有一个主键,只有数字类型的主键才可以设置自动增长
查询表
- 查询当前数据库所有表:show tables;
- 查询表结构:desc 表名;
- 查询建表语句:show create table 表名;
修改表
添加字段
alter table 表名 add 字段名 类型(长度) [约束] [comment 注释];
修改字段类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [约束] [comment 注释];
删除字段
alter table 表名 drop column 字段名;
修改表名
rename table 表名 to 新表名;
删除表
drop table [ if exists ] 表名;
注意:在删除表时,表中的全部数据也会被删除
数据库操作-DML
DML英文全称时Data Manipulation Language(数据操作语言),用来进行对数据库中表的数据增删改操作
添加数据(INSERT)
语法
指定字段添加数据
insert into 表名 (字段名1,字段名2) value (值1,值2);
全部字段添加数据
insert into 表名 values (值1,值2, ... );
批量添加数据(指定字段)
insert into 表名 (字段名1,字段名2) values (值1,值2),(值1,值2);
批量添加数据(全部字段)
insert into 表名 values (值1,值2, ...), (值1,值2, ...);
注意事项
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
- 字符串和日期型数据应该包含在引号中
- 插入的数据大小,应该在字段的规定范围内
修改数据(UPDATE)
语法
修改数据
update 表名 set 字段名1=值1,字段名2=值2, ... [ where 条件 ];
注意事项
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据
删除数据(DELETE)
语法
删除数据
delete from 表名 [ where 条件 ];
注意事项
- DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
- DELETE语句不能删除某一个字段的值,只能删除整行(如果要操作,可以使用UPDATE,将该字段的值设置为NULL)