【苍穹外卖 | 项目日记】第一天

前言:

我打算用16天的时间写完黑马程序员的苍穹外卖项目,为了督促自己每天坚持写以及记录项目知识点,所以用这种项目日记的方式鞭策自己

目录

前言:

今日完结任务:

今日收获:

1.阅读代码框架:

2.新增员工接口:

3.分页查询接口:

4.员工状态修改接口:

杂项知识点:

总结:


 

今日完结任务:

  • 阅读了整个项目框架代码
  • 实现了新增员工接口
  • 实现了分页查询员工接口
  • 实现了员工状态修改接口
  • 实现了编辑员工接口
  • 实现了根据id查询员工接口

今日收获:

1.阅读代码框架:

1.了解了YApi这项统一管理接口文档网站

2.学会使用了基于Swagger的Knife4j依赖来统一测试接口

3.熟练使用集成在IDEA中的git提交代码

 

2.新增员工接口:

1.学习了 ThreadLocal 这一局部变量

ThreadLocal为每一线程提供了一个单独的存储空间,它具有线程隔离的作用,只有在同一个线程内才可以获取到他的值。

在多线程编程中,使用ThreadLocal可以解决线程安全问题。常见的应用场景是保持数据的一致性。例如,在一个线程池中运行的多个线程需要共享一个全局变量,但是每个线程需要对这个变量进行不同的更新操作,这时就可以使用ThreadLocal来为每个线程提供独立的变量副本,从而避免线程之间的干扰和竞争条件的产生。

使用ThreadLocal可以通过调用其静态方法ThreadLocal.set()和ThreadLocal.get()来设置和获取线程的局部变量。需要注意的是,由于每个线程都有自己的变量副本,所以在使用完毕后需要及时清理ThreadLocal中的数据,以免造成内存泄漏。

而本接口对ThreadLocal的应用场景是 实现empservice层中的方法对empController层中变量的调用。

当我们在新增员工的时候,需要表明是谁对新增员工进行了创建和修改,那么我们就需要拿到当前登录用户的Token,并对其解析,就可以得到这两个值

使用ThreadLocal进行存储

调用这个变量:

3.分页查询接口:

1.了解了PageHelper的用法

@Overridepublic PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {//开始分页查询(基于pagehelper)PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);long total = page.getTotal();List<Employee> result = page.getResult();return new PageResult(total, result);}

并且阅读了PageHelper的源码,了解到他的底层还是在建立线程变量,然后在SQL语句执行的时候进行拦截,然后替换变量,实现分页的功能。

2.了解了对于时间格式化的两种方式

        1. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

采用这个注解,但是缺点是他只能对一个属性起作用,也就是说有几个需要进行时间处理的变量,我们就要添加几个注解

        2.自定义消息转换器,可以对全局的变量有效,因为这是我们自己定义的配置类,会在全局生效

 @Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要为消息转换器指定对象转换器    对象转换器课可以将java对象序列化为Json对象converter.setObjectMapper(new JacksonObjectMapper());//将自定义的消息转换器加入到容器中converters.add(0, converter);}

4.员工状态修改接口:

1.了解了基于@builder注解的快速构造方法:

Category category = Category.builder().id(id).status(status).updateTime(LocalDateTime.now()).updateUser(BaseContext.getCurrentId()).build();

杂项知识点:

1.什么是正向代理和反向代理:

简洁的说:正向代理就是隐藏客户端,而反向代理是隐藏服务器

正向代理是客户端发送请求后通过代理服务器访问目标服务器,代理服务器代表客户端发送请求并将响应返回给客户端。正向代理隐藏了客户端的真实身份和位置信息,为客户端提供代理访问互联网的功能。

反向代理是位于目标服务器和客户端之间的代理服务器,它代表服务器接收客户端的请求并将请求转发到真正的目标服务器上,并将得到的响应返回给客户端。反向代理隐藏了服务器的真实身份和位置信息,客户端只知道与反向代理进行通信,而不知道真正的服务器。

我们本次使用的Nginx服务器就具有反向代理的作用

反向代理使得前端的URL资源路径指向Nginx,而不是直接与后端沟通。

2.什么是负载均衡:

负载均衡(Load Balancing)是一种分配工作负载(即请求或数据)到多个计算资源的技术,目的是在不过载任何单个资源的情况下提高整体系统性能、增强可靠性和可扩展性。

其实就是多个服务器轮转接收客户端请求,减轻单台服务器压力。

后面的wegiht可以理解为优先让哪一个服务器接收客户端请求,因为我们这里只有一台服务器,就是我自己的电脑主机,所以无法完成负载均衡操作,因此第二个地址用了#注释。

3.pathparm,pathvariable,requestparm这三个的使用场景;

  1. Path Parameter(路径参数):
    Path Parameter 是通过路径的一部分来传递参数,通常用于 RESTful 风格的 API 中。例如,对于 /users/{id} 的路径,其中 {id} 就是一个 Path Parameter,用于表示用户的唯一标识符。使用 Path Parameter,可以根据不同的路径参数值来执行相应的操作。路径参数通过 @PathVariable 注解来绑定到方法的参数上。

  2. Path Variable(路径变量):
    Path Variable 是指将路径中的一部分作为变量来传递,类似于 Path Parameter。它也常用于 RESTful 风格的 API 中。在 Spring MVC 框架中,可以使用 @PathVariable 注解将路径变量绑定到方法的参数上。与 Path Parameter 不同的是,路径变量通常在路径的任意位置定义,而不是通过占位符的形式。

  3. Request Parameter(请求参数):
    Request Parameter 是通过 URL 的查询字符串(query string)来传递参数的,参数以键值对的形式出现。例如,/users?id=123 中的 id 就是一个 Request Parameter。使用 Request Parameter,可以直接在 URL 中提供参数,用于传递用户请求的信息。在 Spring MVC 中,可以使用 @RequestParam 注解将请求参数绑定到方法的参数上。Request Parameter 是最常见的传递参数的方式,常用于 GET 请求和表单提交。

4.什么是消息转换器和对象转换器:

        消息转换器是在客户端和服务器之间传递消息时用于实现数据格式的转换,将消息的原始格式转换为具有特定数据结构的对象或从对象转换为消息的原始格式。消息转换器常用于处理 HTTP 请求和响应的数据格式转换,例如将 JSON 转换为 Java 对象或将 Java 对象转换为 JSON。

常见的消息转换器包括处理 JSON、XML、Protobuf、Properties 等格式的转换。Spring MVC 中提供了多个内置的消息转换器,并且也支持自定义消息转换器。

对象转换器是将一个对象转换为另一个对象的组件,通常在业务逻辑中使用。对象转换器用于将一个类型的对象转换到另一个类型的对象,可以处理属性的映射、类型转换、数据格式转换等操作。对象转换器通常用于模型对象与视图对象之间的转换,或者是实体对象和DTO(Data Transfer Object)之间的转换。

在实际应用中,消息转换器和对象转换器往往会结合使用。例如,首先通过消息转换器将 HTTP 请求中的 JSON 数据转换为 Java 对象,然后再通过对象转换器将这个 Java 对象转换为业务需要的对象类型。

总结一下:

  • 消息转换器用于在客户端和服务器之间进行消息格式的转换,常用于处理 HTTP 请求和响应的数据格式转换。
  • 对象转换器用于将一个类型的对象转换为另一个类型的对象,通常在业务逻辑中使用,用于处理对象之间的转换。
  @Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要为消息转换器指定对象转换器    对象转换器课可以将java对象序列化为Json对象converter.setObjectMapper(new JacksonObjectMapper());//将自定义的消息转换器加入到容器中converters.add(0, converter);}
}

5.什么是序列化和反序列化:

序列化(Serialization)是将对象转换为字节流的过程,以便将其存储到文件、内存中传输或在网络上进行传输。序列化可以将对象的状态保存到永久存储或传输到其他计算机,以便在需要时能够重新创建对象。序列化过程将对象的属性和数据结构转换为字节序列,使其能够在不同的环境中传输和存储。

反序列化(Deserialization)是将字节流转换回对象的过程,即从序列化的字节流中恢复对象的过程。反序列化将字节流重建为对象,并将其状态和属性恢复到先前序列化的状态。

总结:

今天开始写项目,感觉收获很大,首先就是感觉爽,这是我写的第一个大型项目,这种代码之间联系,分层式的架构是我以前看网课跟练的那些碎片化的代码是完全不同的,我感觉很通畅。其次是感觉时间紧迫,因为我有太多的东西想学了,要抓紧赶进度

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/152792.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#对字典容器Dictionary<TKey, TValue>内容进行XML序列化或反序列化报错解决方法

一、问题描述 在使用C#对字典容器Dictionary<TKey, TValue>内容进行XML序列化报错【System.Exception:“不支持类型 System.Collections.Generic.Dictionary2[[System.String, mscorlib, Version2.0.0.0, Cultureneutral, PublicKeyTokenb77a5c561934e089],[System.Strin…

QQ浏览器怎么才能设置默认搜索引擎为百度

问题&#xff1a; 打开QQ浏览器&#xff0c;搜索相关信息时发现总是默认为”搜狗搜索引擎“&#xff0c;想将其转为”百度搜索引擎“ 解决&#xff1a; 1、点击浏览器右侧”菜单“图标&#xff0c;选择”设置“&#xff0c;如下图所示&#xff1a; 2、在”常规设置“中的”搜…

MAC版Gradle构建Spring5.X源码阅读环境

前言&#xff1a; 三年前鄙人有幸在现已几乎报废的Window的DELL中搭建过Spring源码环境&#xff0c;今天&#xff0c;Mac版的搭建&#xff0c;来了。 本篇文章环境搭建&#xff1a;Spring5.2.1 Gradle5.6.3-all jdk8 IDEA2022.3版本 文章目录 1、Spring源码下载2、Gradle下载…

教资一年可以考几次 教资考试每年次数介绍

教师资格证一年可以考两次。根据教师资格证考试规定&#xff0c;为了满足报考人员的工作需求&#xff0c;达到市场供求均衡的状态&#xff0c;教师资格证区别于其他的技术资格类的考试&#xff0c;会每年举行两次考试&#xff0c;分别在上半年和下半年各举行一次考试。 上半年…

运行软件找不到mfc140u.dll怎么解决,mfc140u.dll是什么文件

"找不到 mfc140u.dll"是一条错误信息&#xff0c;表示您的计算机上缺少一个名为 mfc140u.dll 的动态链接库&#xff08;DLL&#xff09;文件。这个文件通常与 Microsoft Visual C Redistributable 相关。Mfc140u.dll 是 Microsoft 基础类库&#xff08;MFC&#xff0…

React组件

一、React组件 函数组件 // 函数组件 // 组件的名称必须首字母大写 // 函数组件必须有返回值 如果不需要渲染任何内容&#xff0c;则返回 null function HelloFn () {return <div>这是我的第一个函数组件!</div> }// 定义类组件 function App () {return (<di…

动态代理IP常见超时原因及解决方法

在使用动态代理IP时&#xff0c;常常会遇到代理超时的问题。网络环境的不稳定性以及代理IP的质量问题&#xff0c;都可能会引起代理超时。这种情况下&#xff0c;代理服务器无法在规定时间内响应我们的请求&#xff0c;导致请求失败。 使用动态代理IP时&#xff0c;哪些原因会引…

iPhone15系类LDR6020P 超简外围手机转接器/拓展坞方案

目前市面上的手机大部分已经取消3.5音频耳机接口&#xff0c;仅仅保留了Type-c口。但是追求音质和零延迟的用户仍然会选择3.5mm有线耳机&#xff0c;因为在玩手机游戏的时候&#xff0c;音画不同步真的很影响游戏体验&#xff0c;所以Type-C转3.5mm接口线应运而生。 #iPhone15…

Maven聚合项目配合Springcloud案例

创建maven项目 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

LeetCode 1251. 平均售价

题目链接&#xff1a;1251. 平均售价 题目描述 表&#xff1a;Prices Column NameTypeproduct_idintstart_datedateend_datedatepriceint (product_id&#xff0c;start_date&#xff0c;end_date) 是 prices 表的主键&#xff08;具有唯一值的列的组合&#xff09;。 price…

大数据学习(1)-Hadoop

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

RTC 时间、闹钟

实时时钟RTC是一个独立的定时器。RTC模块拥有一个连续计数的计数器&#xff0c;在软件配置下&#xff0c;可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 在掉电情况下 RTC仍可以独立运行 只要芯片的备用电源…

材质、纹理、贴图的区别和关联

1、材质、纹理、贴图的概念 材质&#xff08;Material&#xff09;、纹理&#xff08;Texture&#xff09;、贴图&#xff08;Texture Map&#xff09;是计算机图形学中的三个概念&#xff0c;它们之间存在关系但也有一些区别。 材质&#xff08;Material&#xff09;是描述物…

java spring cloud 工程企业管理软件-综合型项目管理软件-工程系统源码

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

WIN10 NPM的安装

引言&#xff1a; 什么是node.js? javaScript是一门脚本语言&#xff0c;通常被用来编写、执行本地源代码。脚本语言需要一个解析器才能运行&#xff0c;HTML文件中的JavaScript代码由浏览器解析执行。而自行执行JavaScript代码则需要Node.js解析器才能运行。 每个解析器都…

放大招,百度文心大模型4.0正在加紧训练,即将发布

插播一条快讯&#xff01; &#xfeff;&#xfeff;刚刚看到一篇报道&#xff0c;说百度正在加紧训练文心大模型4.0&#xff01;百度5月发布了文心大模型3.5&#xff0c;才4个多月又要发布4.0了&#xff0c;这迭代速度简直了。据说这次发布将在10月17日百度世界大会上进行&am…

【AI】深度学习——人工智能、深度学习与神经网络

文章目录 0.1 如何开发一个AI系统0.2 表示学习(特征处理)0.2.1 传统特征学习特征选择过滤式包裹式 L 1 L_1 L1​ 正则化 特征抽取监督的特征学习无监督的特征学习 特征工程作用 0.2.2 语义鸿沟0.2.3 表示方式关联 0.2.4 表示学习对比 0.3 深度学习0.3.1 表示学习与深度学习0.3.…

OpenCV3-Python(7)模板匹配和霍夫检测

模板匹配 膜版匹配不能匹配尺度变换和视角变换的图像 图片中查找和模板相似度最高的图像 计算相似程度最高的位置 res cv.matchTemplate(img , template, method) 该方法返回一个类似灰度图的东西&#xff0c;如果用的相关匹配&#xff0c;那么亮的地方就是可能匹配上的地方 …

redis 事物

Redis事务 一个队列中&#xff0c;一次性、顺序性、排他性的执行一系列命令 正常执行 放弃事务 在exec执行之前&#xff0c;报错&#xff0c;则所有命令都不会执行 在exec执行后&#xff0c;报错&#xff0c;则其它正确的指令会执行&#xff0c;错误的命令会抛弃 watch 监…

文化主题公园旅游景点3d全景VR交互体验加深了他们对历史文化的认知和印象

如今&#xff0c;沉浸式体验被广泛应用于文旅行业&#xff0c;尤其是在旅游演艺活动中。在许多城市&#xff0c;沉浸式旅游演艺活动已成为游客“必打卡”项目之一。因其独特体验和强互动性&#xff0c;这类演艺活动不仅吸引了外地游客&#xff0c;也吸引了本地观众。 随着信息化…