JavaWeb后端开发知识储备1

news2024/11/19 14:51:11

目录

1.DTO/VO/PO

2.MVC架构/微服务架构

3.JWT令牌流程

4.ThreadLocal

5.接口路径/路径参数

6.自定义注解


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();
}

6.自定义注解

新建Java文件的时候选择annotation

@Retention是 Java 中的一个注解(Annotation),用于指定被注解的元素(如类、方法、变量等)的注解信息在何时被保留。@Retention 注解自身是一个元注解,即它用于注解其他注解。

在 @Retention 注解中,RetentionPolicy 是一个枚举类型,它决定了注解的保留策略。比如RUNTIME,表示该注解在源码、.class文件中存在,并且在运行时通过反射也是可见的。这意味着你可以在程序运行时通过反射机制读取注解信息,这对于实现基于注解的框架特别有用,如Spring

/**
 * 自定义注解
 */
@Target(ElementType.METHOD) //指定注解只能加在方法上
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {
    //数据库操作类型:UPDATE INSERT
    OperationType value();
}

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

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

相关文章

什么是SMARC?模块电脑(核心板)规范标准简介三

1. 概念 SMARC&#xff08;Smart Mobility ARChitecture&#xff0c;智能移动架构&#xff09;是一种通用的小型计算机模块定义&#xff0c;基于ARM和X86技术的模块化计算机低功耗嵌入式架构平台&#xff0c;旨在满足低功耗、低成本和高性能的应用需求。这些模块通常使用与平板…

Filebeat升级秘籍:解锁日志收集新境界

文章目录 一、什么是filebeat二、Filebeat的工作原理2.1 filebeat的构成2.1.1 Prospector 组件2.1.2 Harvester 组件 2.2 filebeat如何保存文件的状态2.3 filebeat何如保证至少一次数据消费 三、Filebeat配置文件四、filebeat对比fluented五、Filebeat的部署安装5.1裸金属安装5…

C++小白实习日记——Day 4 将本地项目上传到gitee

生活就像一坨狗屎 我跑的代码老板说耗时太长了&#xff0c;不知道要怎么做才能耗时小一点 老板把我加到企业gitee里了&#xff0c;让我将代码上传到个人仓库&#xff1a; 新建一个文件夹当做库文件&#xff0c;点git bash here——> git init——>git config --global…

qiankun主应用(vue2+element-ui)子应用(vue3+element-plus)不同版本element框架css样式相互影响的问题

背景&#xff1a;qiankun微前端架构实现多应用集成 主应用框架&#xff1a;vue2 & element-ui 子应用框架&#xff1a;vue3 & element-plus >> 问题现象和分析 登录页面是主应用的&#xff0c;在登录之后才能打开子应用的菜单页面&#xff0c;即加载子应用。 首…

云渲染,解决houdini特效缓存太大上传太慢的问题

对于从事 Houdini 创作的艺术家和设计师们来说&#xff0c;使用云渲染的朋友&#xff0c;缓存太大导致云渲染上传慢一直是一个令人头疼的问题。然而&#xff0c;现在有了成都渲染 101 云渲染&#xff0c;这个难题迎刃而解。Houdini 以其强大的功能能够创建极为复杂和逼真的特效…

前端开发迈向全栈之路:规划与技能

一、前端开发与全栈开发的差异 前端开发主要负责构建和实现网页、Web 应用程序和移动应用的用户界面。其工作重点在于网页设计和布局&#xff0c;使用 HTML 和 CSS 技术定义页面的结构、样式和布局&#xff0c;同时运用前端框架和库如 React、Angular 或 Vue.js 等构建交互式和…

学习QT第二天

QT6示例运行 运行一个Widgets程序运行一个QT Quick示例 工作太忙了&#xff0c;难得抽空学点东西。-_-||| 博客中有错误的地方&#xff0c;请各位道友及时指正&#xff0c;感谢&#xff01; 运行一个Widgets程序 在QT Creator的欢迎界面中&#xff0c;点击左侧的示例&#xf…

删除课表中课程

文章目录 概要整体架构流程技术细节小结 概要 业务分析 删除课表中的课程有两种场景&#xff1a; 用户直接删除已失效的课程 用户退款后触发课表自动删除 技术细节 退款通知 其中用户退款与用户报名课程类似&#xff0c;都是基于MQ通知的方式。具体代码是在tj-trade模块的…

MySQL深度剖析-索引原理由浅入深

什么是索引&#xff1f; 官方上面说索引是帮助MySQL高效获取数据的数据结构&#xff0c;通俗点的说&#xff0c;数据库索引好比是一本书的目录&#xff0c;可以直接根据页码找到对应的内容&#xff0c;目的就是为了加快数据库的查询速度。 索引是对数据库表中一列或多列的值进…

MATLAB常见数学运算函数

MATLAB中含有许多有用的函数,可以随时调用。 a b s abs abs函数 a b s abs abs函数在MATLAB中可以求绝对值,也可以求复数的模长:c e i l ceil ceil函数 向正无穷四舍五入(如果有小数,就向正方向进一)f l o o r floor floor函数 向负无穷四舍五入(如果有小数,就向负方向…

如何使用本地大模型做数据分析

工具&#xff1a;interpreter --local 样本数据&#xff1a; 1、启动分析工具 2、显示数据文件内容 输入&#xff1a; 显示/Users/wxl/work/example_label.csv 输出&#xff1a;(每次输出的结果可能会不一样&#xff09; 3、相关性分析 输入&#xff1a; 分析客户类型与成…

操作系统不挂科】<创建线程(7)>单选多选简答题(带答案与解析)

前言 大家好吖&#xff0c;欢迎来到 YY 滴操作系统不挂科 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的操作系统题目&#xff0c;供yy应对期中考试复习。大家可以参考 本章为选择题题库&#xff0c;试卷…

RAG(Retrieval-Augmented Generation)评测篇

一、为什么需要 对 RAG 进行评测&#xff1f; 在探索和优化 RAG&#xff08;检索增强生成器&#xff09;的过程中&#xff0c;如何有效评估其性能已经成为关键问题。 二、如何合成 RAG 测试集&#xff1f; 假设你已经成功构建了一个RAG 系统&#xff0c;并且现在想要评估它的…

宝塔 docker 部署onlyoffice 服务

1.宝塔安装docker,直接下载安装就行 2.docker拉取onlyoffice镜像 docker pull onlyoffice/documentserver:5.3.1.26 5.4或更高的版本已经解决了连接数限制方法的Bug 3.创建容器 docker run -d --name onlyoffice --restartalways -p 暴露端口号:80 onlyoffice/documentserv…

强制放大缩小(适用于所有ctrl-,ctrl+)

以下操作&#xff1a; 使用资源管理器打开启动文件夹&#xff1a; 按下 Win R 键打开“运行”对话框。输入 shell:startup&#xff0c;然后按下 Enter。这应该会打开启动文件夹。 手动定位启动文件夹&#xff1a; 打开资源管理器并导航到以下路径&#xff1a; C:\Users\admin…

项目2:简易随机数生成器 --- 《跟着小王学Python·新手》

项目2&#xff1a;简易随机数生成器 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握P…

数字资产与大健康领域的知识宝藏:高效知识库搭建策略

在数字化时代&#xff0c;大健康领域的企业积累了丰富的数字资产&#xff0c;这些资产如同一座待挖掘的金矿&#xff0c;蕴含着巨大的价值。高效搭建知识库&#xff0c;能够将这些数字资产转化为企业竞争力。 数字资产与大健康领域知识宝藏 数字资产在大健康领域包括患者数据…

OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!

【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端&#xff0c;全面支持Windows和macOS系统&#xff01;这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说&#xff0c;这一更新带来了令人…

全同态加密基于多项式环计算的图解

全同态加密方案提供了一种惊人的能力 —— 能够在不知道数据具体内容的情况下对数据进行计算。这使得你可以在保持潜在敏感源数据私密的同时&#xff0c;得出问题的答案。 这篇文章的整体结构包括多项式环相关的数学介绍&#xff0c;基于多项式环的加密和解密是如何工作的&…