Maven初级
Maven安装
Maven配置
全局配置
导入Maven项目
依赖配置
Maven高级
后端开发01
springbootweb快速入门
自动创建springboot项目
pom.xml文件说明
<parent> </parent>
标签是指定了一个坐标,是SpringBoot的父工程,我们所创建的所有的SpringBoot工程,都需要继承这个父工程。
<dependencies></dependencies>
添加依赖坐标标签
<build></build>
插件标签
启动类
用来启动SpringBoot工程
手动创建springboot项目
1)在idea中创建一个maven项目,正常填写项目的坐标信息
HTTP
请求(request)
响应(response)
Servlet
Servlet=Server+applet
Server:服务器
applet:小程序
Servlet含义是服务器端的小程序
在整个Web应用中,Servlet主要负责处理请求、协调调度功能。我们可以把Servlet称为Web应用中的『控制器』
Tomcat
后端开发02
请求
1)原始方式:
编写代码:
在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。
测试请求:
@RestController
public class requestController {
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request) {
// 获取请求参数
String name=request.getParameter("name");
String ageStr=request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println(name+":"+age);
return "ok";
}
}
2)SpringBoot方式
简单参数:参数名与形参变量名相同,定义形参即可接收参数。
@RequestMapping("/simpleParam")
public String simpleParam(String name,Integer age) {
// 获取请求参数
System.out.println(name+":"+age);
return "ok";
}
GET请求,请求参数在请求行中(URL)填写。
运行结果和上面一样。
Post请求:数据在请求体中(Body)
简单参数传递
简单实体参数
//实体参数
@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";
}
日期参数
//日期参数
@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 标识
//Json参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "ok";
}
路径参数
路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数
//路径参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "ok";
}
//多路径参数
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id,@PathVariable String name){
System.out.println(id);
System.out.println(name);
return "ok";
}
响应
三层构架
IOC&DI&Bean
分层解耦
IOC&DI入门
@Component注解不可以添加在接口上,因为接口是无法创建对象的
存在多个Bean注入的情况
MySQL
数据库设计-DDL
数据库操作-DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
数据库操作-DQL
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
关键字:SELECT
基本查询
-- =================== 基本查询 ======================
-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from emp ;
-- 2. 查询返回所有字段
-- 方式一: 推荐 , 效率高 . 更直观
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from emp;
-- 方式二:
select * from emp;
-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期) --- as 关键字可以省略
select name as '姓名' ,entrydate as '入职日期' from emp ;
select name '姓名' ,entrydate '入职日期' from emp ;
-- 4. 查询员工有哪几种职位(不要重复) -- distinct
select distinct job from emp;
条件查询
-- =================== 条件查询 ======================
-- 1. 查询 姓名 为 杨逍 的员工
select * from emp where name = '杨逍';
-- 2. 查询在 id小于等于5 的员工信息
select * from emp where id <= 5;
-- 3. 查询 没有分配职位 的员工信息 -- 判断 null , 用 is null
select * from emp where job is null;
-- 4. 查询 有职位 的员工信息 -- 判断 不是null , 用 is not null
select * from emp where job is not null ;
-- 5. 查询 密码不等于 '123456' 的员工信息
select * from emp where password <> '123456';
select * from emp where password != '123456';
-- 6. 查询入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from emp where entrydate between '2000-01-01' and '2010-01-01' ;
-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from emp where (entrydate between '2000-01-01' and '2010-01-01') and gender = 2;
-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from emp where job = 2 or job = 3 or job = 4;
select * from emp where job in (2,3,4);
-- 9. 查询姓名为两个字的员工信息
select * from emp where name like '__';
-- 10. 查询姓 '张' 的员工信息 ---------> 张%
select * from emp where name like '张%';
-- 11. 查询姓名中包含 '三' 的员工信息
select * from emp where name like '%三%';
-- 练习 : 员工管理列表查询
-- 条件 : name , gender , entrydate
select * from emp where name like '%张%' and gender = 1 and entrydate between '2000-01-01' and '2010-01-01';
分组查询
-- =================== 分组查询 ======================
-- 聚合函数
-- 1. 统计该企业员工数量 -- count
-- A. count(字段)
select count(id) from emp;
select count(job) from emp; -- null值不参与聚合函数运算
-- B. count(*) --推荐
select count(*) from emp;
-- C. count(值)
select count(1) from emp;
-- 2. 统计该企业员工 ID 的平均值
select avg(id) from emp;
-- 3. 统计该企业最早入职的员工的入职日期
select min(entrydate) from emp;
-- 4. 统计该企业最近入职的员工的入职日期
select max(entrydate) from emp;
-- 5. 统计该企业员工的 ID 之和
select sum(id) from emp;
-- 分组
-- 1. 根据性别分组 , 统计男性和女性员工的数量 -- count
select gender , count(*) from emp group by gender;
-- 2. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位 -- count
select job ,count(*) from emp where entrydate <= '2015-01-01' group by job having count(*) >= 2;
排序查询
-- =================== 排序查询 ======================
-- 1. 根据入职时间, 对员工进行升序排序 -- 排序条件
select * from emp order by entrydate asc ; -- 默认升序, asc可以省略的
select * from emp order by entrydate ;
-- 2. 根据入职时间, 对员工进行降序排序
select * from emp order by entrydate desc;
-- 3. 根据 入职时间 对公司的员工进行 升序排序 , 入职时间相同 , 再按照 ID 进行降序排序
select * from emp order by entrydate asc , id desc ;
-- 练习 : 员工管理列表查询 , 根据最后操作时间, 进行倒序排序
-- 条件 : name , gender , entrydate
select * from emp where name like '%张%' and gender = 1 and entrydate between '2000-01-01' and '2010-01-01' order by update_time desc;
分页查询
案例练习
案例1:
select *from tb_emp where name like '张%' and gender=1 and entrydate between'2000-01-01'and '2015-12-31' order by update_time desc limit 0,10;
//格式化后
select *
from tb_emp
where name like '张%'
and gender = 1
and entrydate between '2000-01-01' and '2015-12-31'
order by update_time desc
limit 0,10;
案例2:
-- 男性与女性员工的人数统计 (1 : 男性员工 , 2 : 女性员工)
-- 函数: if(条件表达式 , t , f)
--select gender,count(*) from tb_emp group by gender;//根据性别统计数量
select
if(gender = 1, '男性员工' , '女性员工') '性别',
count(*) '人数'
from emp group by gender;
-- 员工职位信息统计-- count
-- 函数: case when ... then ... when ... then ... else ... end
-- 函数: case ... when ... then ... when ... then ... else ... end
-- select * from emp group by job;//根据职位分组
-- select job from emp group by job;//根据职位分组
select
(case when job = 1 then '班主任' when job = 2 then '讲师' when job = 3 then '教研主管' when job = 4 then '学工主管' else '无职位' end ) '职位',
count(*)
from emp group by job;
select
(case job when 1 then '班主任' when 2 then '讲师' when 3 then '教研主管' when 4 then '学工主管' else '无职位' end ) '职位',
count(*)
from emp group by job;
多表设计
多表查询
内连接
事务
索引