maven




maven概述及安装



idea集成maven
配置maven环境


创建maven项目


导入maven项目


依赖管理
依赖配置

依赖传递



依赖范围

生命周期






这些生命周期的执行都是由maven中的插件来完成的。
SpringBootWeb入门
spring&springboot



springbootweb快速入门





HTTP协议
概述

请求协议


响应协议

响应状态码&响应头:


协议解析

Tomcat

介绍

基本使用




入门程序解析(内嵌tomcat)


请求响应
概述

请求
Postman

简单参数&实体参数








数组,集合参数



日期参数&json参数


json当中所有的key值必须使用""包裹
路径参数

总结

响应
@Responsebody


统一响应结果

构建一个统一的Result类:
package com.itheima.pojo;
/**
* 统一响应结果封装类
*/
public class Result {
private Integer code ;//1 成功 , 0 失败
private String msg; //提示信息
private Object data; //数据 date
public Result() {
}
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static Result success(Object data){
return new Result(1, "success", data);
}
public static Result success(){
return new Result(1, "success", null);
}
public static Result error(String msg){
return new Result(0, msg, null);
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}

分层解耦
三层架构



分层解耦


IOC&DI入门



IOC详解



DI详解


Mybatis

入门
快速入门程序




上面的接口代码在运行时,会自动生成该接口的实现类对象,并且将该对象交给IOC容器管理。

配置SQL提示


JDBC



数据库连接池



lombok工具包


基础操作
删除






新增

注意:#{属性名},属性名不要写成表中的字段名了!

id只的是返回回来的主键值往emp对象的id属性中去封装
更新

查询


不能自动封装解决方案:

注:如果使用第三个方案需要严格遵守数据库中的字段名是下划线分隔,类中的属性名是驼峰命名法。

注意:#{}是不能出现在引号内的!所以接口方法方案一用${}来替换。
小补充:

XML映射文件

resultType:单条记录所封装的类型(图中查询出来的单条记录为Emp对象类型)


动态SQL
if


注:自动去除子句开头的and或者or是只去除多余的,并不是全都去掉!
如果字段是String类型除了考虑null的情况还要考虑该字段是否为空字符串的情况!!

foreach

sql&include

补充细节









文件上传
简介




上传上来的文件是临时文件,文件上传这次请求响应完之后临时文件会自动删除。
本地存储



常用的MultipartFile方法:

阿里云OSS






配置文件
参数配置化


yml配置文件




@ConfigurationProperties



如果需要注入的属性只有一两个且只用注入一次则使用@Value即可;如果要注入的属性非常的多且还想做到复用,则可以先定义一个bean对象,再用@ConfigurationProperties批量得把属性注入到bean对象的属性当中,在其他类当中要是想获取到注入到bean对象的属性,就可以直接注入bean对象再调用getXXX方法获取到属性值。
登录校验
概述

会话技术

看会话数量一般是看浏览器数量,每个会话内的多次请求都是独立的(http协议)



JWT令牌
介绍


生成和校验


登陆后下发令牌


Filter过滤器
快速入门

详解



登录校验过滤器

用到一个快速JSON格式转换的依赖包
<!--fastJSON-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
代码:
@Slf4j
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String url = req.getRequestURL().toString();
log.info("请求的url: {}",url);
//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行。
if(url.contains("login")){
log.info("登录操作, 放行...");
chain.doFilter(request,response);
return;
}
//3.获取请求头中的令牌(token)。
String jwt = req.getHeader("token");
//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)。
if(!StringUtils.hasLength(jwt)){
log.info("请求头token为空,返回未登录的信息");
Result error = Result.error("NOT_LOGIN");
//手动转换 对象--json --------> 阿里巴巴fastJSON
String notLogin = JSONObject.toJSONString(error);
resp.getWriter().write(notLogin);
return;
}
//5.解析token,如果解析失败,返回错误结果(未登录)。
try {
JwtUtils.parseJWT(jwt);
} catch (Exception e) {//jwt解析失败
e.printStackTrace();
log.info("解析令牌失败, 返回未登录错误信息");
Result error = Result.error("NOT_LOGIN");
//手动转换 对象--json --------> 阿里巴巴fastJSON
String notLogin = JSONObject.toJSONString(error);
resp.getWriter().write(notLogin);
return;
}
log.info("令牌合法, 放行");
chain.doFilter(request, response);
}
}
Interceptor拦截器
快速入门




详解(拦截路径,执行流程)


异常处理


注释包含@ResponseBody,就会将方法的返回值转化成JSON格式返回给前端。

事务管理
spring事务管理



rollbackFor属性

propagation属性


AOP
基础
快速入门




核心概念


一旦进行了AOP程序的开发,执行的不再是一开始的目标对象,而是基于目标对象所生成的代理对象。调用的方法也是代理对象内的方法了。
进阶
通知类型

通知顺序

切入点表达式【execution和@annotation】


包名.类名不建议省略



需要先自己创建一个注解类再使用这个注解去注解在方法/类上再作为切点表达式
@Retention是指生效的时间
@Target是指该注解要注解在方法还是类上去作为标记

连接点


用来在通知中获取方法运行时的相关信息。
Springboot原理篇
配置优先级




Bean管理
bean的获取

代码例子:

bean作用域


第三方bean


Springboot原理
起步依赖

自动配置
概述

方案


原理分析-->源码跟踪


原理分析-->@Conditional



自定义starter

Maven高级
分模块设计与开发



继承与聚合
继承关系实现



详细步骤:




版本锁定



聚合实现



私服
介绍

资源的上传与下载





