第3 章 请求响应
请求
Postman
- Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
- 作用:常用于进行接口测试
简单参数
- 原始方式: 在原始的web程序中,获取请求参数,需要通过 HttpServletRequest 对象手动获取。
- SpringBoot 方式: 简单参数:参数名与形参变量名相同,定义形参即可接收参数。会自动进行类型转换
@RequestMapping("/simpleParam")
public String simpleParam(String name , Integer age){
System.out.println(name+" : "+age);
return "OK";
} - 简单参数:如果方法形参名称与请求参数名称不匹配,可以使用
@RequestParam
完成映射。@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name") String username , Integer age){
System.out.println(username + " : " + age);
return "OK";
}- @RequestParam 中的 required 属性默认为true ,代表该请求参数必须传递,如果不传递将报错。 如果该参数是可选的,可以将 required 属性设置为 false。
实体参数
简单实体对象
请求参数名与形参对象属性名相同,定义POJO接收即可
public class User {
private String name;
private Integer age;
}
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}
复杂实体对象
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。
public class Address {
private String province;
private String city;
}
public class User {
private String name;
private Integer age;
private Address address;
}
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}
数组集合参数
数组参数
请求参数名与形参数组名称相同且请求参数为多个,直接使用数组类型形参接收参数。
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
集合参数
请求参数名与形参集合名称相同且请求参数为多个,通过 @RequestParam
绑定参数关系
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
日期参数
日期参数:使用 @DateTimeFormat
注解完成日期参数格式转换
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
Json参数
JSON 参数:JSON 数据键名与形参对象属性名相同,定义 POJO 类型形参即可接收参数,需要使用 @RequestBody
标识。
路径参数
路径参数:通过请求 URL 直接传递参数,使用 {…} 来标识该路径参数,需要使用 @PathVariable
获取路径参数
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable String name){
System.out.println(id+ " : " +name);
return "OK";
}
响应
@ResponseBody
- 类型:方法注解、类注解
- 位置:Controller 方法上/类上
- 作用:将方法返回值直接响应,如果返回值类型是 实体对象 / 集合 ,将会转换为 JSON 格式响应
- 说明:
@RestController = @Controller + @ResponseBody
; - 不便管理,需要统一响应结果,Result(code、msg、data)
案例
Springboot 项目的静态资源(html,css,js等前端资源)默认存放目录为:classpath:/static 、 classpath:/public、 classpath:/resources
分层解耦
三层架构
- 复用性差、难以维护 VS 复用性强、便于维护、利于拓展
分层解耦
- 内聚:软件中各个功能模块内部的功能联系。
- 耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
- 软件设计原则:高内聚低耦合。
IOC & DI入门
@Component
将当前类交给 IOC 容器管理,成为 IOC 容器中的 bean@Autowired
运行时,IOC 容器会提供该类型的 bean 对象,并赋值给该变量,依赖注入
IOC详解
注意事项:
- 声明 bean 的时候,可以通过 value 属性指定 bean 的名字,如果没有指定,默认为类名首字母小写。
- 使用以上四个注解都可以声明 bean ,但是在 springboot 集成 web 开发中,声明控制器 bean 只能用 @Controller。
组件扫描
- 前面声明 bean 的四大注解,要想生效,还需要被组件扫描注解
@ComponentScan
扫描。 @ComponentScan
注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 。@SpringBootApplication
中,默认扫描的范围是启动类所在包及其子包。
DI详解
@Autowired
注解,默认是按照类型进行,如果存在多个相同类型的 bean ,将会报出错误。- 通过以下几种方案来解决:
@Primary
@Primary // 定义在 service 层
@Service
public class EmpServiceA implements EmpService {
}@Autowired + @Qualifier("bean的名称")
@RestController
public class EmpController {
@Autowired
@Qualifier("empServiceA") // 定义在 Controller 层
private EmpService empService ;
}@Resource(name="bean的名称")
@RestController
public class EmpController {
@Resource(name = "empServiceB") // 定义在 Controller 层
private EmpService empService ; @Resource
与@Autowired
区别@Autowired
是 spring 框架提供的注解,而@Resource
是 JDK 提供的注解。@Autowired
默认是按照类型注入,而@Resource
默认是按照名称注入。
第 4 章 MySQL
数据库
- 数据库:DataBase(DB),是存储和管理数据的仓库。
- 数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。
- SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
MySQL概述
- 数据模型:关系型数据库(RDBMS): 建立在关系模型基础上,由多张相互连 接的二维表组成的数据库。
- SQL: 一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写。
- 注释:
- 单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
- 多行注释: /* 注释内容 */
- SQL 分类
数据库设计-DDL
DDL 英文全称是 Data Definition 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 中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
- create_time:记录的是当前这条数据插入的时间。 update_time:记录当前这条数据最后更新的时间。
- 查询
- 查询当前数据库所有表:
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 ] 表名
;
- 删除表: