前言
1.什么是JavaWeb?
Web:全球广域网,也成为万维网(www),能通过浏览器访问的网站。
JavaWeb:用Java开发网站的技术栈。
2.本教程的基础框架
网页端:展现数据
HTML:制作页面
CSS:美化页面
JavaScript:产生丰富的动态效果
Ajax+Vue+ElementUI:前端框架技术
数据库:存储和管理数据
MySQL:关系型数据库
JDBC:Java语言操作数据库的api
Maven:项目管理框架
MyBatis:简化操作JDBC的框架
JavaWeb程序:逻辑处理
Tomcat+HTTP+Servlet:
Request+Response:
JSP:
Cookies+Session:
Filter+Listener:

一.数据库
1.1数据库相关概念
数据库:
存储数据的仓库,数据是有组织地进行存储。
DataBase,简称为DB,下一级是数据表,表中存的是数据。
数据库管理系统:
管理数据库的大型软件。
DataBase Management System,DBMS。
SQL结构化查询语言:
操作关系型数据库的编程语言。
定义操作所有关系型数据库的统一标准。

1.2安装MySQL
建议安装mysql5.5等稳定版,不要安装8.0。并且配置环境变量等,这些有专门的教程,在此就不再赘述。
1.3启动与关闭MySQL服务
打开cmd,键入net start mysql启动数据库,mysql -u用户名 -p密码 -h要访问的ip地址 -P端口,例如:mysql -uroot -p1234 -h127.0.0.1 -P3306
键入net stop mysql即停止mysql服务,exit或quit退出mysql
1.4mysql数据模型
关系型数据库
关系型数据库的建立在关系模型基础上的数据库,简单来说,关系型数据库是由多张能互相连接的二维表组成的数据库。
优点:1.都是表结构,格式一致,易于维护;2.使用通用的SQL语言操作,使用方便,可用于复杂查询;3.数据存储在磁盘中,安全。
语句分类:DDL(操作数据库、表等);DML(对表中数据进行增删改);DQL(对表中数据进行查询);DCL(对数据库进行权限控制)
1.4常用数据库语句
1.4.1DDL-操作数据库
Show DataBases;-- 查看数据库
create database if not exists db1;-- 若不存在db1数据库就创建它
drop database if exists db1;-- 若db1数据库存在就删除它
use db1;-- 启用数据库db1
SELECT DataBase()-- 查看当前在用的数据库
1.4.2DDL-查询表&创建表
use mysql;-- 启用数据库mysql
show tables;-- 查询当前数据库中的所有表
desc func;-- 查询表func
create table tb_user(id int,username varchar(20),password varchar(32));-- 创建表tb_user,包含字段id,username,password,其中id是int类型,username是字符串类型,且其长度不能超过20位
数据类型:
数值型

字符串型

其中的char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和
字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char是以空间换时间,其性能会更高些。
日期时间型

案例:设计一张学生表,字段如下,请注重数据类型、长度的合理性等
编号
姓名,姓名最长不要超过10个汉字
性别,因为取值只有两种可能,因此最多一个汉字
生日,取值为年月日
入学成绩,小数点后保留两位
邮件地址,最大长度不超过64
家庭联系电话,不一定是手机号码,可能出现-等字符
学生状态(用数字表示,正常,休学,毕业等)
create table student(
id int,
name varchar(10),
gender char(1),
birthday date,
score double(5,2),
email varchar(64),
tel varchar(15),
states tinyint
);
1.4.3DDL-操作表
修改表
ALTER TABLE 表名 RENAME TO 新的表名;-- 修改表名
ALTER TABLE 表名 ADD 列名 数据类型;-- 添加一列
ALTER TABLE 表名 MODIFY 列名 新数据类型;-- 修改数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;-- 修改列名和数据类型
ALTER TABLE 表名 DROP 列名;-- 删除列字段
请将student表名改为stu,然后添加一列address varchar(50),然后修改address的数据类型,然后修改数据类型,继续修改列名和数据类型,最后删除列。
alter table student rename to stu;-- 修改表名
alter table stu add address varchar(50);-- 添加字段address varchr类型,限制50
alter table stu modify address char(50);-- 修改address数据类型为char(50)
alter table stu change address addr varchar(50);-- 修改列名为address,修改数据类型为varchar(50)
alter table drop addr;-- 删除字段addr
1.4.4DML-增删改表内数据
添加数据
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);-- 给指定的列添加数据
INSERT INTO 表名 VALUES(值1,值2,...);-- 给全部列添加数据
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);-- 给指定列批量添加数据
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);-- 批量添加数据
修改数据
UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件];-- 修改表数据,若不加where,会对指定列的所有数据进行修改
-- 例如将张三的id改为3,性别改为女
UPDATE stu SET id = 3,gender = '女' WHERE name = '张三';
删除数据
DELETE FROM 表名 [WHERE 条件];-- 删除WHERE指定的数据
DELETE FROM 表名;-- 会直接删完表中所有数据,但是会保留表
1.4.5DQL-数据查询
基础查询
SELECT 字段列表 -- 尽量不要用*,因为*不好分辨是哪些字段
FROM 表名列表
WHERE 条件列表
GROUP BY 分组字段
HAVING 分组后条件
ORDER BY 排序字段
LIMIT 分页限定;
去除重复记录
SELECT DISTINCT address from stu;-- 查询字段address,但是要去重
起别名
SELECT address AS '地址' from stu;-- 从stu表中查取address并起别名叫'地址'
条件查询
SELECT 列名 FROM 表名 WHERE 条件字句;
条件字句有如下几种:

模糊查询
/*
LIKE关键字可以匹配通配符:_匹配单个字符,%匹配多个字符
*/
-- 查询姓'马'的学员信息
SELECT * FROM stu WHERE `name` LIKE '马%';
-- 查询第二个字是'花'的学员信息
SELECT * FROM stu WHERE `name` LIKE '_花%';
-- 查询名字中包含'德'的学员信息
SELECT * FROM stu WHERE `name` LIKE '%德%';
排序查询
排序方式:ASC(默认)升序排列,DESC降序排列
-- 如果有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段2 [排序方式2],...;
-- 查询学生信息,按年龄升序排列
SELECT * FROM stu ORDER BY age;
-- 查询学生信息,按数学成绩降序排列
SELECT * FROM stu ORDER BY math DESC;
-- 查询学生信息,按数学成绩降序排列,如果数学成绩一样,再按英语成绩升序排列
SELECT * FROM stu ORDER BY math DESC,english;
聚合函数:将一列数据作为整体,进行纵向计算
常见聚合函数:

聚合函数写法:
SELECT 聚合函数(列名) FROM 表;-- 注意null值不参与聚合计算
-- 1.统计班级一共有多少学生
SELECT COUNT(1) FROM stu;
-- 2.查询数学最高分
SELECT MAX(math) FROM stu;
-- 3.查询数学总分
SELECT SUM(math) FROM stu;
-- 4.查询数学均分
SELECT AVG(math) FROM stu;
分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
-- 查询男同学和女同学各自的数学均分
SELECT sex,AVG(math) FROM stu GROUP BY sex;
-- 查询男同学和女同学各自的数学均分,以及各自人数
SELECT sex,AVG(math),COUNT(1) FROM stu GROUP BY sex;
-- 查询男生和女生各自的数学均分,以及各自人数,要求:分数低于70分的不参与分组
SELECT sex,AVG(math),COUNT(1) FROM stu WHERE math >= 70 GROUP BY sex;
-- 查询男同学和女同学各自的数学均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2
SELECT sex,AVG(math),COUNT(1) FROM stu WHERE math >= 70 GROUP BY sex HAVING COUNT(1) > 2;
注意:执行顺序上,WHERE>聚合函数>HAVING,所以HAVING可以在分组后,过滤聚合函数的结果,但是WHERE不可以。
分页查询
如下图所示,大家在很多网站都见过类似的效果,如京东、百度、淘宝等。分页查询是将数据一页一页的展示给用户看,用 户也可以通过点击查看下一页的数据。

其具体语法如下:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;-- 上述语句中的起始索引是从0开始
-- 从0开始查询,查询3条数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示3条数据,查询第一页数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示3条数据,查询第二页数据
SELECT * FROM stu LIMIT 3,3;
-- 每页显示3条数据,查询第三页数据
SELECT * FROM stu LIMIT 6,3;