寒假java

  • JDK: Java Development Kit

    包含了JRE、编译器、调试器等开发工具

  • JRE: Java Runtime Environment

    运行Java字节码的虚拟机

  • @Data注解是由Lombok库提供的,会生成getter、setter以及equals()、hashCode()、toString()等方法

  • SpringCache中常用的注解

    e345715b003c1e514533f5fea1671b2

CRUD的含义

​ CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。

  • 模糊查询

    select * from 表名 where 列名 like '%horse%' ---- 查那一列中含有'horse'的那一项
    select * from 表名 where 列名 like 'horse%' ---- 查那一列中以'horse'开头的那一项
    select * from 表名 where 列名 like '%horse' ---- 查那一列中以'horse'结尾的那一项
    select * from 表名 where 列名 like 'horse' ---- 查那一列中等于'horse'的那一项
    select * from 表名 where 列名 like '--H' ---- 查那一列中第三个字符为'H'的那一项
JavaWeb
  • 框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
servelet
  • servlet的工作过程:浏览器发送http请求,此时servlet尚未初始化,然后等servlet初始化后将http请求解析为request对象交由serlet处理后返回response对象,然后将response对象转化为http响应,再将响应传给客户端。
@RequestParam和@PathVariable的区别

@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:

  • 通过@PathVariable,例如/blogs/1
  • 通过@RequestParam,例如blogs?blogId=1
  • 1793be6b3e65e2d6e40de7e30667785
Java程序的作用
  • java程序里面写的就是浏览器提起请求之后应该响应相应的数据。加上了@ResponseBody注解就可以为请求响应数据。 对象以及集合会以json格式响应。
IOC&DI
  • 1、service层及Dao层的实现类,交给IOC容器管理。在类上方加上Component注解
  • 2、为Controller及Service注入运行时,依赖的对象。在变量上加上Autowired注解
Lombok

Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

原理:在程序编译的时候根据上面的注解为该实体类提供什么样的方法

f8a8f53057ec94a86ed86f1fd217b43

MySQL

5938e30d11912fad92dc681cbc3f0f1

MyBatis数据的自动封装

cd9c91ac4ede27422682c43f32de993

三种解决方案:1.起别名;2.通过@Results 与@Result注解手动映射封装;3.开启Mybatis驼峰命名自动映射开关。注意在使用第三种解决方案时,需要实体类的字段名是驼峰命名,数据库中是下划线命名。

7c65911d7000225f01f136fa27ef0d3

使用日志记录框架记录日志
  • 使用日志记录框架记录日志,要定义一个日志记录对象private static Logger log= LoggerFactory.getLogger(DeptController.class);在其他类中如果也需要定义日志记录对象这句代码就比较麻烦,我们可以使用注解@Sjf4j,就可以直接使用log对象的info方法来记录日志。
@RequestMapping的简便表示
  • 要限定开发接口的请求方式是GET,可以在@RequestMapping(value = “/depts”,method = RequestMethod.GET)指定请求方式为GET。为简化这个注解可以直接用@GetMapping(“/depts”)限定请求方式为GET,之后也可以使用@PostMapping(“/depts”)之类的。
会话技术
  • Cookie技术

    Cookie是客户端会话跟踪技术,储存在客户端浏览器。使用Cookie进行会话跟踪,可以在浏览器向服务器发起第一次请求时设置一个Cookie。比如在浏览器第一次请求登陆接口时,登陆接口执行完成之后就可以设置一个Cookie用于存储相关的信息如当前登陆用户的用户名及其信息,服务器向浏览器响应数据时,就将这个Cookie自动相应回去;浏览器接收到响应的数据时就会自动将数据储存在本地;在后续的请求当中浏览器会自动将数据携带到服务器端。自动进行的原因是因为Cookie是HTTP协议当中支持的技术,浏览器产商支持这一标准,HTTP协议当中就为此提供了一个响应头SetCookie以及一个请求头Cookie。

55c1dde9508344a4341999f54768989

  • Session技术

    ​ Seesion是存储在服务器端的会话技术 ,底层基于Cookie 。基于Session进行会话跟踪,在浏览器第一次进行请求的时候可以直接在服务器端获取会话对象Session,但是第一次请求时Session对象不存在,服务器会自动的创建一个会话对象Session,且每一个会话对象都有一个id(Session的id)。服务器端在给浏览器端响应数据的时候将Session的id通过Cookie响应给浏览器,也就是在响应头当中增加了一个SetCookie响应头,浏览器接收到响应数据之后会自动的将Cookie存储在浏览器本地。在后续的每一次请求当中都会将Cookie的数据获取出来并且携带到服务端。服务器端拿到Session的值也就是Session的id之后,就会从众多的Session当中找到当前请求对应的会话对象。这样就可以通过Session会话对象在同一次会话的多次请求之间来共享数据。
    6b83879a41231e02501b9a214990da2

    • 令牌技术

      ​ 令牌也就是用户身份的标识(字符串),浏览器发起请求请求登录接口的时候若登陆成功就生成一个令牌,在响应数据的时候就可以将这个身份响应给前端,前端接收到令牌之后可以将其保存起来,可以存在Cookie或其他的存储空间当中,在后续的每一次请求当中都需要将这个令牌携带到服务器端,校验令牌的有效性。如果是在同一个会话的多次请求当中共享数据,就可以将要共享的数据存在令牌当中。
      74f44369bb06649559d3cad115be102

JWT令牌

ae738de06008c06b640223798442cf6

全局异常处理器

9d2ada3e3aa610a09db942a84df9fba

事务进阶—propagation属性

Propagation属性也就是指定几个事务之间的关系,常见的主要是新的事务加入到已有的事务当中(REQUIRED)或者新事物自己重新再开一个属于自己的事务(REQUIRED_NEW)。

AOP(面向切面编程)

AOP: Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程。

d9219361f827be146e0bb78502b0113

​ SpringAOP底层基于动态代理技术实现,程序运行的时候自动基于动态代理技术为目标对象生成对应的代理对象。在代理对象当中就会对目标对象的原始方法进行功能增强,增强的逻辑就是定义的通知。比如首先在方法运行开始之前记录方法运行的开始时间,再来调用原始方法的执行(list方法),接下来在代理对象当中就会实行原始list方法的逻辑,运行完毕之后就会记录方法运行的结束时间,最后统计方法的运行时长。可以看到在代理对象当中就已经对原始方法进行了增强,最终在程序运行的时候往Controller注入的是代理对象,调用的方法也是代理对象的list方法。(其实就是避免代码的臃肿的基础上,又想加功能,那就直接把对象代码交给代理,嵌套在代理方法中去)

67e6ce15b602da045fb9d605c29eb05

AOP进阶
  • 通知类型

9f5e819ed7c736d2f93801b3fe6d29d

  • @PointCut

711863644f133be4338a04bd625f548

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Aspect
public class MyAspect1 {

@Pointcut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
public void pt(){};

@Before("pt()")
public void before() {
log.info("before...");
}

@Around("pt()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("around before...");

Object proceed = joinPoint.proceed();

log.info("around after");
return proceed;
}

@After("pt()")
public void after() {
log.info("after...");
}

@AfterReturning("pt()")
public void afterReturning() {
log.info("afterReturning...");
}

@AfterThrowing("pt()")
public void afterThrowing() {
log.info("afterThrowing...");
}
}
  • 切点表达式

    5d96e4de8dc157b12b8d282bcce4a11

SpringBoot—配置优先级

三种配置文件当中优先级:properties>yml>yaml

9da2f998086c242772239f0d031b6bf