基于苍穹外卖写的springboot学习笔记

一.关于md5加密的了解与使用

1.分析

  MD5加密是一种不可逆的加密算法。也就是说我们只能正向加密,无法反向解密。

  于是乎,当我们用它作为密码加密方式时,我们只能加密码从数据库拿来与前端传来的数据加密后进行比较。

2.使用方法

  他是由springboot框架提供

二.关于swagger的了解与使用

1.导包

  Knife4j是为Java MVC 框架集成Swagger 生成Api文档的增强解决方案。

2.在配置类中配置相关信息

 

3.设置静态资源映射,否者接口文档无法访问

注意:前端的访问端口号为80,后端为8080。nginx负责将前端进行部署

   但这里swagger访问端口号是8080,说明我们是没有将swagger部署在前端。

4.swagger常用注解

@Api(tags=“”) 用在类上,对类进行描述,例如Controller层

 

@ApiModel(description=“”) 用在类上,一般的在实例类上使用,如果controller层的参数的类被他修饰则在接口文档页面会看到它的修饰

 

@ApiModelProperty(“ ”) 用在属性上,描述属性的信息

 

@ApiOperation(“ ”) 用在方法上,例如:Controller层的方法上

 三.关于BaseContext的了解与使用

1.理解

 BaseContext是基于ThreadLocal类封装的工具类,用于在同一线程中的封装数据和获取数据。

  要注意的是ThreadLocal并不是一个Thread,而是Thread的局部变量。相当于线程变量,而每一次http请求后端服务器都会创建一个新的线程。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。我们把这个叫做线程隔离。

 

下面三个线程独立,线程变量相当于他们的副本,可以在本次线程内操作这些变量

                    

 

2.使用

  一般的我们在拦截器的类中获取jwt令牌并解析出id,之后通过存入当前线程变量中,也就是ThreadLocal中,后续使用通过

获取id。 

 

四.关于分页查询

  两种方法实现:

   1.直接用数据库查询语句:select * from table limit start,pageSize;

   2.用PageHelper工具,他是由springboot框架提供的工具。

    他帮我们自动的计算出开始查询位置,查询数。

五.地址栏参数和路径参数有什么区别?

  看了网上那些人说的,没什么太大的区别,并没有明确的指明什么时候用什么。

  要注意的是,当使用路径参数的时候,需要在controller的参数总添加注解:@PathVariable,而地址栏传参一般不用注解@Requestparam,一般是封装一个对象。

例如:

 

六.四种请求方式都有什么区别?(2024.3.5)

 

  GET,POST,DELETE,PUT这四种请求在日常使用中没有什么太大区别,其实我们可以拿post去替代delete,也是可以实现的,但这违背了Http协议规范。不提倡。

  遵守Http协议规范有哪些好处:

    见名知意,一般的GET请求是查看请求,POST请求是新增请求,DELETE请求是删除请求,PUT请求是修改请求。

   

七.一次登录请求的过程是如何实现的?

  首先,我们发起一次登录请求,后端这边会最先经过拦截器,拦截器判断到请求是登录请求,选择放行,这时来到Controller层方法,方法中调用srvice层方法,这里会将password进行加密处理,同时会根据用户名在mapper进行条件查询。返回查询数据,对数据进行合法判断,判断是否为null,并抛出异常,如果数据存在,则与前端传来的已被加密的数据进行比对。正确返回员工数据,反之抛出异常。这里返回到了Controller层,Controller层将返回数据加入到jwt令牌的创建中,最后返回Result.success();

  对于拦截器,这里使用的Interceptor拦截器。在请求到达Controller前回先经过拦截器的preHandle方法,在执行完请求后再经过逻辑器的postHandle和afterCompletion方法。

八.关于面向切面编程的了解与使用

  面向切面编程的优点:

    官方的话就是为了实现横切关注点的模块化,使得关注点可以被集中管理和使用。这跟static又有一点点类似,但又有不同。

  区别:

    1.动态需求

    aop可以获取到当前的类的或方法的属性,这便可以动态的完成一些配置操作。

    2.代码复用性

    如果一段代码是重复的,不变的且还是通用的,我们使用static。

    3.横切关注点的性质

    如果您的横切关注点涉及到横跨多个模块或组件的通用功能,比如日志记录、性能监控、事务管理等,那么AOP更适合。

 

  更改:什么是AOP?

  AOP称为面向切面编程,是将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,我们将这段代码抽取出来封装为一个可重用的模块,这个模块叫“切面”,这样降低了模块与模块之间的耦合度。

 

九.关于使用aop是可能会用到的技术的了解与使用

  1.自定义注解

   定义注解类

   添加两大注解

  2.枚举

   用于定义一些常量或常量方法

  3.aop的使用

  需要添加@Aspect注解来确定是一个注解类,这样才会识别注解中的方法,

  需要添加@Component注解,aop是运行时生效,所以要把他交给spring容器来管理,这样来实现动态拼接。

   切入点的使用:

     @Printcut("execution(* con.sky.mapper.*.*.(..)  && @annotation(com.sky.annotation.AutoFill)")

    execution(任意返回值 路径下的所有类下的所有方法可以是任意参数)

 十.关于@Component、@Bean、@Controller、@Service、@Mapper这几种注解的区别

  @Bean:一般用在方法上,用来实例化一些对象并被容器管理

  @Component: 他是spring框架最通用的注解之一,用于标识一个类作为Spring管理的组件。@Component 是一个顶层的泛型注解,还有其他一些专门用于特定场景的子注解,比如 @Service 用于标识服务层组件、@Repository 用于标识数据访问对象等。这些子注解都是 @Component 的特化,用于更明确地表示被注解类的用途。

  @Controller、@Service、@Mapper:这三种注解都是用在不同业务层,分别是控制层,业务逻辑层,数据访问层。实质上与Component注解并无差别,只是代表了一层含义而已

 十一.关于阿里云oss对象存储的使用方法

  1.明确思路

    ①在springboot项目中,首先在.yml文件中配置需要的属性,域名 节点 id字段 密钥

    ②准备属性类,准备utils工具类

     ③在Config包中准备配置类,用于完成将属性类中的数据绑定给utils类。(注意:这里需要给配置类中的方法添加@Bean注解,@Bean一般用在方法上,将方法返回值交给springboot容器管理,存储的一般是实体类)

    ④在Controller层接收文件信息,其中需要解决文件名可能会重复的问题,这里我们用到UUID工具类,随机生成一串不重复的字符串。之后通过字符串方法 String.lastIndexof( );(获取最后一次出现该字符串的地方的索引值)  再用String.substring();获取后缀名。 最后拼接。调用工具类方法即可。     

    String str = "hello world";
    String substr1 = str.substring(6); // 返回 "world"
    String substr2 = str.substring(0, 5); // 返回 "hello"

十二.关于mappper层的一些使用技巧

  一般用于插入操作

  像那些需要执行完数据库操作返回本次id主键值的可以在对应的.xml文件的对应语句中加入  useGeneratedKeys=“true”,代表返回之间值,keyProperty="id"代表返回的值赋值给id。

  对于那些需要批量插入的数据,无需再service层多次调用mapper层,可以只用<foreach>进行循环操作。

  一般用于查询操作

  多表查询

  一般的删除操作

  删除操作流程首先:

  ①判断被删除数据是否可以被删除,例如:起售中的菜品不允许被删除,被套餐关联的菜品不允许被删除

  ②删除数据

  ③删除被关联到的数据,例如:菜品关联到的口味数据

 

     

posted @ 2024-03-08 22:08  又混一天  阅读(69)  评论(0编辑  收藏  举报