JavaWeb回顾与小结(三)

发布时间 2023-04-25 19:25:47作者: zFlame_5020

请求与响应概述

架构

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

  1. 类型:方法注解,类注解
  2. 位置:Controller方法上/类上
  3. 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为json格式响应
  4. 说明:@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文件中的数据,完成数据处理,并在页面展示。

操作步骤

  1. 在pom.xml文件中引入dom4j的依赖,用于解析XML文件
  2. 引入资料中提供的解析XML的工具类XMLParserUtils,实体类Emp,XML文件emp.xml
  3. 引入资料中提供的静态页面文件,放在resources下的static目录下
  4. 编写Controller程序,处理请求,响应数据

分层解耦

三层架构

  • Controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据
  • Service:业务逻辑层,处理具体的业务逻辑
  • Dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查

分层解耦

  • 内聚:软件中各个功能模块内部的功能联系
  • 耦合:衡量软件中各个层/模块之间的依赖,关联的程度
  • 软件设计原则:高内聚低耦合
  • 解耦
  1. 控制反转:Inversion Of Control,简称IOC.对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转
  2. 依赖注入:Dependency Injection,简称DI.容器为应用程序提供运行时,所依赖的资源,称之为依赖注入
  3. 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)