找图做素材啥网站好,网上商城怎么下载,聊城高新区建设局网站,js页面wordpress前言#xff1a;
我打算用16天的时间写完黑马程序员的苍穹外卖项目#xff0c;为了督促自己每天坚持写以及记录项目知识点#xff0c;所以用这种项目日记的方式鞭策自己
目录
前言#xff1a;
今日完结任务#xff1a;
今日收获#xff1a;
1.阅读代码框架#xf…前言
我打算用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());PageEmployee page employeeMapper.pageQuery(employeePageQueryDTO);long total page.getTotal();ListEmployee result page.getResult();return new PageResult(total, result);}并且阅读了PageHelper的源码了解到他的底层还是在建立线程变量然后在SQL语句执行的时候进行拦截然后替换变量实现分页的功能。 2.了解了对于时间格式化的两种方式 1. JsonFormat(pattern yyyy-MM-dd HH:mm:ss) 采用这个注解但是缺点是他只能对一个属性起作用也就是说有几个需要进行时间处理的变量我们就要添加几个注解 2.自定义消息转换器可以对全局的变量有效因为这是我们自己定义的配置类会在全局生效 Overrideprotected void extendMessageConverters(ListHttpMessageConverter? 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这三个的使用场景; Path Parameter路径参数 Path Parameter 是通过路径的一部分来传递参数通常用于 RESTful 风格的 API 中。例如对于 /users/{id} 的路径其中 {id} 就是一个 Path Parameter用于表示用户的唯一标识符。使用 Path Parameter可以根据不同的路径参数值来执行相应的操作。路径参数通过 PathVariable 注解来绑定到方法的参数上。 Path Variable路径变量 Path Variable 是指将路径中的一部分作为变量来传递类似于 Path Parameter。它也常用于 RESTful 风格的 API 中。在 Spring MVC 框架中可以使用 PathVariable 注解将路径变量绑定到方法的参数上。与 Path Parameter 不同的是路径变量通常在路径的任意位置定义而不是通过占位符的形式。 Request Parameter请求参数 Request Parameter 是通过 URL 的查询字符串query string来传递参数的参数以键值对的形式出现。例如/users?id123 中的 id 就是一个 Request Parameter。使用 Request Parameter可以直接在 URL 中提供参数用于传递用户请求的信息。在 Spring MVC 中可以使用 RequestParam 注解将请求参数绑定到方法的参数上。Request Parameter 是最常见的传递参数的方式常用于 GET 请求和表单提交。 4.什么是消息转换器和对象转换器 消息转换器是在客户端和服务器之间传递消息时用于实现数据格式的转换将消息的原始格式转换为具有特定数据结构的对象或从对象转换为消息的原始格式。消息转换器常用于处理 HTTP 请求和响应的数据格式转换例如将 JSON 转换为 Java 对象或将 Java 对象转换为 JSON。
常见的消息转换器包括处理 JSON、XML、Protobuf、Properties 等格式的转换。Spring MVC 中提供了多个内置的消息转换器并且也支持自定义消息转换器。
对象转换器是将一个对象转换为另一个对象的组件通常在业务逻辑中使用。对象转换器用于将一个类型的对象转换到另一个类型的对象可以处理属性的映射、类型转换、数据格式转换等操作。对象转换器通常用于模型对象与视图对象之间的转换或者是实体对象和DTOData Transfer Object之间的转换。
在实际应用中消息转换器和对象转换器往往会结合使用。例如首先通过消息转换器将 HTTP 请求中的 JSON 数据转换为 Java 对象然后再通过对象转换器将这个 Java 对象转换为业务需要的对象类型。
总结一下
消息转换器用于在客户端和服务器之间进行消息格式的转换常用于处理 HTTP 请求和响应的数据格式转换。对象转换器用于将一个类型的对象转换为另一个类型的对象通常在业务逻辑中使用用于处理对象之间的转换。 Overrideprotected void extendMessageConverters(ListHttpMessageConverter? converters) {log.info(扩展消息转换器);//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter new MappingJackson2HttpMessageConverter();//需要为消息转换器指定对象转换器 对象转换器课可以将java对象序列化为Json对象converter.setObjectMapper(new JacksonObjectMapper());//将自定义的消息转换器加入到容器中converters.add(0, converter);}
} 5.什么是序列化和反序列化 序列化Serialization是将对象转换为字节流的过程以便将其存储到文件、内存中传输或在网络上进行传输。序列化可以将对象的状态保存到永久存储或传输到其他计算机以便在需要时能够重新创建对象。序列化过程将对象的属性和数据结构转换为字节序列使其能够在不同的环境中传输和存储。
反序列化Deserialization是将字节流转换回对象的过程即从序列化的字节流中恢复对象的过程。反序列化将字节流重建为对象并将其状态和属性恢复到先前序列化的状态。
总结
今天开始写项目感觉收获很大首先就是感觉爽这是我写的第一个大型项目这种代码之间联系分层式的架构是我以前看网课跟练的那些碎片化的代码是完全不同的我感觉很通畅。其次是感觉时间紧迫因为我有太多的东西想学了要抓紧赶进度
如果我的内容对你有帮助请点赞评论收藏。创作不易大家的支持就是我坚持下去的动力