首页 > 编程语言 >JavaWeb回顾与小结(三)

JavaWeb回顾与小结(三)

时间:2023-04-25 19:37:13浏览次数:39  
标签:JavaWeb 回顾 数据 数据库 参数 表名 注解 小结 字段名

请求与响应概述

架构

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)

标签:JavaWeb,回顾,数据,数据库,参数,表名,注解,小结,字段名
From: https://www.cnblogs.com/kyrie-66/p/17348595.html

相关文章

  • JavaWeb回顾与小结(二)
    AjaxAjax介绍概念AsynchronousJavaScriptAndXML,异步的JS和XML作用数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术原生Ajax准备数据地址创建XMLHttpRequest对象:......
  • 回顾Python的可迭代对象、迭代器、生成器
    一、可迭代对象:可以用for遍历的对象,包括list、set、dict等。二、迭代器:能够记录当前迭代位置的可迭代对象,就是迭代器。1)把list、set、dict等简单的可迭代对象用iter()函数包装一下,就成了迭代器。例如x=iter([1,2,3])#type(x)输出list_iteratory=iter({1,2,3})#type(y)......
  • 2023年4月小结
    >个人博客地址:[https://note.raokun.top](https://note.raokun.top)>拥抱ChatGPT,国内访问网站:[https://www.playchat.top](https://www.playchat.top)**由于最近服务器和域名出了问题,做了博客的迁移,也改了博客的二级域名。博客地址迁移到了朋友的本地服务器上,确保了数据的安全......
  • 活动回顾|微服务x容器开源开发者 Meetup 成都站回放 & PPT 下载
    4月15日,“微服务x容器开源开发者Meetup”成都站圆满落幕。活动现场,Dubbo、OpenSergo、OpenYurt、Seata、Higress、OpenKruiseGame等云原生领域传统&新锐开源项目的核心维护者与来自互联网、IT服务商 、在线金融、智慧交通、智能制造、医疗数字化、游戏/互娱、信息安全等......
  • 线程池使用小结
    在Java中,Executors是一个线程池的工厂类,它可以创建不同类型的线程池。下面是几种常见的Executors线程池,以及它们的使用区别:FixedThreadPool:这种类型的线程池有一个固定的线程数量,一旦线程池中的全部线程都在处理任务,那么后续提交的任务将会等待。如果应用程序需要限制线程数量,......
  • 一文回顾JVM
     ......
  • JavaWeb回顾与小结(一)
    初识前端网页有哪些部分组成文字,图片,音频,视频,超链接网页的本质程序员写的HTML,CSS,JavaScript前端代码前端代码如何转换成网页通过浏览器解析和渲染成用户看到的网页web标准也称网页标准,由一系列的标准组成,大部分由W3C(WorldWideWebConsortium,万维网联盟)复制制......
  • 2021年终回顾 | 我的云原生拥抱之路
    2021即将结束,又到了一年一度的年终盘点时刻,今年该说点啥?回顾这一年,还是从盘点技术说起,聊一聊我的云原生拥抱之路,在云原生之路上我都从哪些方面入手,学到了什么。1、背景之前一直专注于微服务体系架构的研发工作,以Java语言作为我的第一程序语言,并伴随了我很多年。随着2020年8......
  • 每日小结
    昨天对servlet的问题搞不清楚今天还是在搞,也不知道是什么设备有问题,也不报错,就是不显示界面,在网上搜了不知道多久,愣是没有一个解释的和遇到的问题一样 ......
  • 老杜 JavaWeb 讲解(四) ——Servlet编写JDBC连接数据库
    老杜 JavaWeb 讲解对应视频:08-servlet中编写jdbc程序连接数据库(六)在Servlet(Java小程序)中编写JDBC连接数据库6.1JDBC介绍:JDBC的全称是Java数据库连接(JavaDatabaseconnect),它是一套用于执行SQL语句的JavaAPI。[1]JDBC(JavaDataBaseConnectivity)是Java编程语言中......