JavaWeb后端开发知识储备1

目录

1.DTO/VO/PO

2.MVC架构/微服务架构

3.JWT令牌流程

4.ThreadLocal

5.接口路径/路径参数


1.DTO/VO/PO

1.1 DTO

DTO 即 Data Transfer Object—— 数据传输对象,是用于传输数据的对象,通常在服务层与表现层之间传递数据,DTO 通常用于减少网络传输的数据量,因为它只包含需要传递的数据,而不包含业务逻辑。DTO 常用于不同服务或系统之间的数据交换。

public class UserDTO {private String id;private String username;private String email;// 可能还包含其他的传输相关字段// Getters and Setters
}

1.2 VO

VO 即 Value Object-——值对象,VO 通常在表示层(如前端)使用,表示一个具体的业务场景中的数据结构,可能是多个领域对象或实体对象的组合。

public class UserVO {private String username;private String displayName;// 可能包含一些展示相关的信息,比如角色、权限等// Getters and Setters
}

1.3 PO

PO 即 Persistent Object——持久化对象,PO 是与数据库表结构一一对应的 Java 对象,用于表示数据库中的一行记录。特点:

  • 直接映射到数据库表结构,通常对应于数据库中的一张表
  • 包含数据库字段的所有属性
  • 可能包括一些与数据库相关的注解或映射信息
@Entity
@Table(name = "users")
public class UserPO {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "username")private String username;@Column(name = "password")private String password;@Column(name = "email")private String email;// Getters and Setters
}

三者的工作流程:

  1. 从数据库到业务逻辑:在系统需要从数据库中获取数据时,通过 DAO 层获取 PO 对象,将其从数据库加载到内存
  2. 业务层处理:如果业务逻辑复杂或者需要传递给其他服务时,将 PO 转换成 DTO 或 VO 对象进行传输,以减少依赖性和安全风险。
  3. 传输到客户端:DTO 将业务层处理后的数据传输到控制器层,最终封装为 API 响应返回给客户端。
  4. 从客户端到数据库:客户端提交的数据通过控制器层接收后转换为 DTO 或 VO,再经业务逻辑处理后转化为 PO,最终将数据保存至数据库。

总结:

  • PO:用于数据库交互,直接与数据库表结构相关
  • DTO:用于跨层传输数据,通常为精简版或安全版的数据结构
  • VO:用于业务逻辑,封装系统内的不可变数据

2.MVC架构/微服务架构

MVC架构和微服务架构是两种不同层次的架构模式,MVC是一种应用内的架构模式,主要用于组织单个应用程序的代码逻辑,而微服务是一种系统级的架构模式,用于将一个大型应用分解成多个可独立部署的服务。

具体来说,MVC(Model-View-Controller)是一种常见的软件架构模式,用于将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这种分层结构帮助组织代码,提高应用的可维护性和扩展性。

Model负责处理应用程序的核心数据逻辑。它包含应用程序的数据结构和业务逻辑,直接与数据库进行交互,并进行数据的增删改查操作。

View负责呈现数据给用户,是用户与应用程序交互的界面。视图的主要目的是展示数据,但不包含业务逻辑。

Controller是模型和视图之间的桥梁,负责处理用户输入并协调模型和视图的工作。控制器从视图接收用户输入,将其解释为对模型的操作。

3.JWT令牌流程

4.ThreadLocal

客户端每次发送的请求都属于单独的一个线程(最小单位,进程是软件),所以如果想要在一个请求中获取信息就可以通过ThreadLoacl。ThreadLocal 并不是一个Thread(线程),而是Thread的局部变量。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。ThreadLocal常用方法:

  • public void set(T vare)  设置当前线程的线程局部变量的值
  • public T get()  返回当前线程所对应的线程局部变量的值
  • public void remove()  移除当前线程的线程局部变量

当然,往往使用ThreadLocal的时候都会简单地封装成一个工具类:

public class BaseContext {public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();public static void setCurrentId(Long id) {threadLocal.set(id);}public static Long getCurrentId() {return threadLocal.get();}public static void removeCurrentId() {threadLocal.remove();}}

5.接口路径/路径参数

在Java后端开发中,接口路径和路径参数是指向服务器资源和处理请求数据的重要概念,接口路径是API中一个特定的URL地址,用于定位资源或功能,例如:

  • https://example.com/api/users:其中/api/users就是接口路径,表示访问用户资源的接口

在Java后端开发中,接口路径通常由控制器(Controller)类来定义。例如在Spring框架中,可以使用@RequestMapping@GetMapping等注解来指定路径,例如下面的代码中,/api/users就是getAllUsers()方法的接口路径

@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users")public List<User> getAllUsers() {// 逻辑代码}
}

路径参数是URL路径中的动态部分,通常用于识别特定资源。路径参数使用{}括起来,并且会在方法中被解析并绑定。例如:

  • https://example.com/api/users/123:其中123就是路径参数,表示要访问ID为123的用户资源

假设我们有一个电商系统,需要获取特定商品的详细信息。可以使用路径参数来标识商品的ID:接口路径定义为:/api/products/{productId},如果要获取ID为888的商品信息,客户端会发起以下请求:

GET https://example.com/api/products/101

在Spring框架中,我们可以用@PathVariable注解来捕获这个路径参数:

@RestController
@RequestMapping("/api/products")
public class ProductController {@GetMapping("/{productId}")public Product getProductById(@PathVariable("productId") Long productId) {// 假设我们从数据库获取商品信息Product product = productService.findProductById(productId);return product;}
}
  • {productId} 是路径参数占位符
  • @PathVariable("productId") 把URL中的productId参数提取出来,并赋值给方法参数productId
  • 当请求GET /api/products/101到达时,Spring会自动将路径中的101赋值给productId,然后在getProductById方法中使用这个值来获取商品信息

再举一个例子,要写一个启用禁用员工账号的接口,接口路径+路径参数为/status/{status}

@PostMapping("/status/{status}")
@ApiOperation("启用禁用员工账号")
public Result startOrStop(@PathVariable("status") Integer status, Long id){employeeService.startorstpp(status,id);return Result.success();
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

35岁程序员的四条职业发展路径:提前规划,迎接新起点

引言 20多岁&#xff1a;初入职场&#xff0c;怀揣梦想&#xff0c;对未来充满期待。30多岁&#xff1a;面临家庭与事业的双重压力&#xff0c;开始感到迷茫与焦虑。40岁&#xff1a;步入中年&#xff0c;如何在激烈的职场竞争中保持优势&#xff0c;继续书写精彩人生&#xf…

C++提高编程-泛型编程

一、模板&#xff1a; 1.1.模板的概念: 1.模板就是建立通用的模具&#xff0c;大大提高复用性2.例如生活中的模板: 一寸照片模板&#xff1a; PPT模板&#xff1a; 模板的特点&#xff1a; 模板不可以直接使用&#xff0c;它只是一个框架模板的通用并不是万能的 二、泛型编…

【Chapter 3】Machine Learning Classification Case_Prediction of diabetes-XGBoost

文章目录 1、XGBoost Algorithm2、Comparison of algorithm implementation between Python code and Sentosa_DSML community edition(1) Data reading and statistical analysis(2)Data preprocessing(3)Model Training and Evaluation(4)Model visualization 3、summarize 1…

Java学习——Day12

多态指的是同一个方法不同对象调用会有不同的行为&#xff0c;多态是方法的多态&#xff0c;属性没有多态&#xff0c;多态要有继承和重写。 这就是多态&#xff0c;其实原理也很简单&#xff0c;就是利用继承方法的重写实现的 对象的转型 向上转型&#xff1a;子类转成父类&…

AI生成字幕模型whisper介绍与使用

文章目录 前言一、whisper介绍二、预训练模型下载与环境配置三、推理 前言 随着人工智能技术的飞速发展&#xff0c;AI生成字幕模型已成为视频内容创作和传播领域的重要工具。其中&#xff0c;OpenAI推出的Whisper模型以其卓越的性能和广泛的应用场景&#xff0c;受到了广大用…

计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)

1&#xff0c; 概述 1.1 课题背景 近几年来&#xff0c;随着物业相关的各种信息越来越多&#xff0c;比如报修维修、缴费、车位、访客等信息&#xff0c;对物业管理方面的需求越来越高&#xff0c;我们在工作中越来越多方面需要利用网页端管理系统来进行管理&#xff0c;我们…

4G与lora DTU农业监测应用数字化管理升级

农业监测的数字化管理升级&#xff0c;通过采用4G和LoRa等无线技术&#xff0c;解决渔业养殖、畜牧管理、农业灌溉以及远程监测等领域的互联互通。 渔业养殖水质监测 在渔业养殖中4G DTU通过采集各种水质传感器进行水质监测&#xff0c;4G DTU能够实时监测养殖水体的温度、pH值…

GA/T1400视图库平台EasyCVR视频融合平台HLS视频协议是什么?

在数字化时代&#xff0c;视频监控系统已成为保障安全、提升效率的关键技术。EasyCVR视频融合云平台&#xff0c;作为TSINGSEE青犀视频在“云边端”架构体系中的重要一环&#xff0c;专为大中型项目设计&#xff0c;提供了一个跨区域、网络化的视频监控综合管理系统平台。它不仅…

maven工程修改jdk编译版本的几种方法

一.背景 maven工程修改jdk编译版本的几种方法&#xff0c;以前这些小细节处理了就处理了&#xff0c;没有去记录&#xff0c;现在带徒弟&#xff0c;就写下吧&#xff01;可能不全面&#xff0c;不喜勿喷。哦&#xff0c;说下&#xff0c;本文的例子是在eclipse中开发截图的。 …

详细介绍Transformer!

&#x1f917;Transformer是一种神经网络架构&#xff0c;核心思想是利用自注意力机制来捕捉序列中元素之间的关系。从而避免了传统RNN难以处理长序列依赖的问题。 Transformer的主要组件和流程 &#x1f4ab;Encoder-Decoder结构 Transformer包含编码器和解码器两个主要部分…

中国车牌分类

从颜色和单双层分类(不考虑临时车牌) 黄单黄双黄绿单蓝单蓝双绿单绿双黑单黑双白单白双 #特殊文字 挂使港澳学警领临

【4060显卡也能跑高质量的Flux模型了吗】MIT Han 实验室开源了一个Flux的量化项目——SVDQuant

麻省理工学院&#xff08;MIT&#xff09;Han 实验室一直在积极开展一系列项目&#xff0c;包括微小机器学习&#xff08;Tiny Machine Learning&#xff09;、SANA、SVDQuant 和 QServe&#xff0c;这些项目旨在提高人工智能计算的效率&#xff0c;并实现在边缘设备上的高效部…

基于Java Springboot学生管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL5.7 数据库管理…

DELL Precision 系列默认用的都是非ECC内存

文章目录 DELL Precision 系列默认用的都是非ECC内存概述SSD升级SSD1SSD2 笔记DELL Precision 系列默认用的都是非ECC内存可以选非ECC的内存 备注备注如果不差钱备注END DELL Precision 系列默认用的都是非ECC内存 概述 去了一次DELL维修中心&#xff0c;清了一次灰。人工真贵…

Linux基础(2)以及资源耗尽病毒的编写(详见B站泷羽sec)

免责声明&#xff1a;本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害&#xff0c;包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等&#xff0c;不承担任何责任。所有使用本教程内容的个人或组织应自行承担全部风险。 Linux…

20241114软考架构-------软考案例15答案

每日打卡题案例15答案 15.【2016年真题】 难度&#xff1a;一般 阅读以下关于应用服务器的叙述&#xff0c;在答题纸上回答问题1至问题3。&#xff08;25分&#xff09; 【说明】 某电子产品制造公司&#xff0c;几年前开发建设了企业网站系统&#xff0c;实现了企业宣传、产品…

【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;统计好节点的数目 代码与解题思路 先读题&#xff1a;题目要求我们找出好节点的数量&#xff0c;什么是好节点&#xff1f;“好节点的所有子节点的数量都是相同的”&#xff0c;拿示例一…

HarmonyOs DevEco Studio小技巧29--ArkTS文字如何渐变

这是需求 昨天想了老多方法 一开始以为加上线性渐变这个属性就好了 Entry Component struct TextTest {State message: string 中华人民共和国万岁;build() {RelativeContainer() {Text(this.message).id(TextTestHelloWorld).fontSize(33).fontWeight(FontWeight.Bold).alig…

块设备 - 想进阶的必经之路!

在Linux内核开发的世界中&#xff0c;块设备&#xff08;Block Device&#xff09;是一块不可忽视的领域。它承载了文件系统的运行&#xff0c;管理着磁盘存储的核心逻辑&#xff0c;是初学者迈向内核进阶的重要知识点。本篇文章将用通俗易懂的语言&#xff0c;为你揭开块设备的…

高鑫零售实现扭亏为盈,逆市增长的高鑫零售未来何在?

大润发母公司高鑫零售发布截至9月30日的2025财年中期业绩报告&#xff1a;营收347.08亿元人民币&#xff0c;税后溢利1.86亿元&#xff0c;同比增加5.64亿元&#xff0c;实现扭亏为盈&#xff0c;高鑫零售的成绩单我们该如何分析&#xff1f; 首先&#xff0c;整体来看&#x…