User类CRUD实现

代码:
WYend/Myblog_springbook3: 我的第一个个人网站(后端版)
随时更新

一、数据库的构建

交给ai

二、各类注解

Lombok注解
  1. @Data
    • 自动生成类的gettersettertoString()equals()hashCode()方法
    • 适用于实体类(与数据库表映射的类)、数据传输对象(DTO)、值对象(VO)等纯数据载体类
  2. @EqualsAndHashCode(callSuper = false)
    • 自动生成equals()hashCode()方法,表示生成这两个方法时不包含父类的属性(仅比较当前类的字段)。
    • 实体类继承自基类,且equals/hashCode的判断只需要关注当前类的核心字段(如idusername),无需考虑父类属性时。
  3. @Accessors(chain = true)
    • 修改setter方法的生成逻辑,chain = truesetter方法返回当前对象(而非void),支持链式调用
    • 需要频繁设置多个属性时(如对象初始化、参数组装),尤其适合构建器模式(Builder)的简化替代
    • user.setName("张三").setAge(20).setEmail("test@xxx.com")
MyBatis-Plus 注解
  1. @TableName(“user”)
    mybatis-plus CRUD扩展:雪花算法、自动填充策略、乐观锁-CSDN博客

三、MVC架构

User实体类

对应数据库表

UserMapper

继承BaseMapper,并传入User实体

Service

UserService
  1. 继承Iservice类,实现通用CRUD
  2. 实现了:获取所有用户、获取用户、创建、删除、更新、改变用户状态的方法,通过传入id或DTO数据
UserServiceImpl
  1. 通过baseMapper的查询方法和mybatis-plus的条件构造器(QueryWrapper)实现了checkUsernamecheckEmail两个自定义查询方法
  2. 整体使用baseMapper的CRUD方法

UserDTO

UserController

用户管理RESTful API控制器,主要负责处理前端发起的用户相关HTTP请求,调用服务层逻辑并返回标准化响应。以下是核心内容的解析:

一、类的基本定位与注解

@RestController  // 标记这是一个REST控制器,自动将返回值转为JSON/XML响应体
@RequestMapping("/api/users")  // 所有接口的基础路径,即接口URL都以/api/users开头
@Tag(name = "用户管理", description = "用于用户管理的所有接口集合")  // Swagger文档注解,标记接口组信息
public class UserController { ... }
  • 核心作用:作为前端与服务层的中间层,接收用户请求(如查询、新增、修改用户),转发给UserService处理,最终返回HTTP响应。
  • 遵循MVC模式:控制器(Controller)不处理业务逻辑,仅负责请求分发和响应封装,业务逻辑由UserService实现。

二、核心依赖注入

@Autowired  // Spring自动注入UserService实例,无需手动创建
private UserService userService;
  • 通过依赖注入解耦控制器与服务层,控制器只需调用userService的方法即可完成业务处理,无需关心其具体实现。

三、核心接口功能(RESTful API设计)

控制器定义了6个接口,对应用户管理的CRUD(增删改查)及状态修改操作,每个接口通过不同的注解指定HTTP方法和路径:

接口方法HTTP方法路径功能描述
getAllUsersGET/api/users查询所有用户列表
getUserByIdGET/api/users/{id}根据ID查询单个用户
createUserPOST/api/users新增用户
updateUserPUT/api/users/{id}根据ID全量更新用户信息
deleteUserDELETE/api/users/{id}根据ID删除用户
changeUserStatusPATCH/api/users/{id}/status部分更新(仅修改用户状态)

四、关键技术细节

  1. 请求参数处理

    • @PathVariable Integer id:获取URL路径中的参数(如/api/users/1中的1)。
    • @RequestBody UserDTO userDTO:接收HTTP请求体中的JSON数据,转为UserDTO对象(DTO用于数据传输,避免直接暴露实体类)。
    • @RequestParam Integer status:获取URL查询参数(如/api/users/1/status?status=1中的1)。
  2. 响应处理

    • 使用ResponseEntity封装HTTP响应,包含状态码、响应体等信息:
      • ResponseEntity.ok(...):返回200 OK状态,附带响应数据(如用户列表、单个用户)。
      • ResponseEntity.notFound().build():返回404 Not Found(用户不存在时)。
      • ResponseEntity.badRequest().body(...):返回400 Bad Request,附带错误信息(如操作失败原因)。
  3. API文档支持

    • @Operation:描述单个接口的功能(如summary为简要说明,description为详细描述)。
    • @Parameter:描述接口参数(如是否必填、示例值),用于自动生成Swagger文档,方便前端对接。
  4. 异常处理

    • createUserupdateUser等方法添加try-catch,捕获服务层抛出的RuntimeException,将异常信息通过响应体返回给前端,避免接口直接报错崩溃。

总结:这个UserController是用户模块的入口,通过标准化的API接口对外提供用户管理功能,同时通过依赖注入、异常处理等机制保证了代码的灵活性和健壮性。

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

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

相关文章

【Linux | 网络】数据链路层

一、以太网1.1 认识以太网1.2 以太网帧格式1.3 MAC地址1.3.1 认识MAC地址1.3.2 MAC地址的类型1.3.3 MAC地址 VS IP地址1.4 局域网如何通信1.5 局域网数据碰撞1.5.1 数据碰撞1.5.2 划分碰撞域(交换机)二、ARP协议2.1 ARP协议的作用2.2 ARP数据报的格式2.3…

Google Ads广告验证全攻略:如何借助动态住宅IP精准投放?

在竞争激烈的数字广告领域,Google Ads扮演着至关重要的角色。然而,随着广告政策的不断更新和平台对广告质量要求的提高,广告验证已成为许多广告主绕不开的环节。同时,如何实现精准投放,将广告触达最相关的目标受众&…

鸿蒙Next Web组件生命周期详解:从加载到销毁的全流程掌控

想要精通鸿蒙应用开发?Web组件的9大生命周期回调是你必须掌握的上帝视角!在鸿蒙应用开发中,Web组件是我们加载本地或在线网页的强大工具。它提供了完整的生命周期回调体系,让开发者能够精准感知网页加载的每个阶段,从而…

python学习进阶之异常和文件操作(三)

文章目录1.程序异常2.文件操作3.json操作1.程序异常 1.1 异常 异常概念: 程序在运行时, 如果Python解释器遇到到一个错误, 则会停止程序的执行, 并且提示一些错误信息, 这就是异常 抛出异常: 程序停止执行并且提示错误信息这个动作, 通常称之为抛出(ra…

NodeJS 8 ,从 0 到 1:npm 包发布与更新全流程指南( 含多场景适配与踩坑总结 )

目录 前言 一、准备工作 1.1 开发环境搭建 1.1.1 环境安装 1.1.2 配置问题 1.2 账号注册 1.2.1 账号注册(两种方式) 1.2.2 登录验证 1.2.3 个人设置 1.2.4 安全配置 1.3 初始配置 1.3.1 初始项目目录 1.3.2 关键字段详解 1.3.3 手动完善 二…

BERT中文预训练模型介绍

bert-base-chinese 是由谷歌基于 BERT(Bidirectional Encoder Representations from Transformers)模型预训练得到的适用于中文任务的模型版本。以下从多个方面对其进行详细解释: 模型概述 BERT 是一种基于 Transformer 架构的预训练语言模型…

Archon01-项目部署

Archon01-项目部署当前已经参考B站视频针对代码进行修改,可直接使用BigModel智谱的GLM-4.5替换openAI进行使用,部署环境(Python3.12-slim环境)1-核心知识点关键字: Docker Supabase Archon BigModel Python1&#xff0…

HarmonyOS时间戳完全指南:DevEco Studio中的时间处理与实战应用

时间戳是现代应用开发中不可或缺的基础功能,无论是日志记录、数据同步、缓存管理还是状态追踪都离不开时间戳的支持。本文将深入探讨在DevEco Studio中如何处理和使用时间戳,并提供丰富的实战示例。一、时间戳基础概念什么是时间戳?时间戳&am…

论文笔记:On the Biology of a Large Language Model

《关于大型语言模型的生物学》(On the Biology of a Large Language Model)的文章,深入探究了 Anthropic 公司 Claude 3.5 Haiku 模型的内部工作机制。研究人员将理解语言模型比作生物学研究,旨在揭示其复杂行为背后的“神经回路”…

TCP/IP、HTTP 和 HTTPS简介

我们来系统地介绍一下 TCP/IP、HTTP 和 HTTPS。它们之间的关系可以概括为:​​HTTP 和 HTTPS 是运行在 TCP/IP 基础网络架构之上的具体应用协议​​。为了更直观地理解它们之间的关系,我们可以参考下面的网络分层模型:flowchart TDsubgraph A…

【30】C#实战篇——获取路径下的文件名(不包含路径和扩展名),文件名由连续的数字编号+连续的字母编号组成,并分离出文件名数字部分和英文部分

文章目录1 要求2 分析 与 实现1 要求 写一个函数,获取路径下的文件名(不包含路径和扩展名),并分离出文件名fileName ,文件名编号SN,文件名前缀WMT ; 输入文件路径,解析出不带"…

EasyExcel部署Docker缺少字体报错

报文 java.lang.NullPointerException: nullat sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.…

从“收款工具”到“智能中枢”:AI如何重构POS系统的技术架构与商业价值?

引⾔:从交易终端到智能中枢的⼗字路⼝ 在现代商业的繁忙图景中 ,销售点( Point of Sale, POS) 系统⻓期以来被视为交易流程的终点 ——⼀个简单完成收款、打印票据的⼯具。然⽽ ,这⼀认知正在被迅速颠覆。 随着数字经济的深 化 ,POS系统已演变为连接顾客、 商品与服务的…

unity以战斗截图并加上微信二维码分享

开发游戏时,会遇到战斗结算,成就等奖励界面,鼓励玩家分享到朋友圈,这时通常会在图片上加上一些内容,比如游戏Logo,二维码下载等内容。现在分享一下我制作游戏分享图片的过程。第一步首先截图,截…

新手向:实现验证码程序

本文将从零开始,通过一个简单的验证码程序。即使你没有任何编程基础,也能跟着这篇文章一步步学习。第一章:Java开发环境搭建1.1 安装JDK要开始Java编程,首先需要安装Java开发工具包(JDK)。JDK是Java开发的核心环境,包含…

使用Flask实现接口回调地址

使用Flask实现接口回调地址 一、接口回调的基本概念 接口回调(Callback)是一种异步通信机制,当某个事件发生时(如支付完成、任务结束),服务提供方会主动调用预先配置的URL(即回调地址&#xff0…

vue2+jessibuca播放h265视频

文档地址&#xff1a;http://jessibuca.monibuca.com/api.html#background 1,文件放在public中 2,在html中引入 3&#xff0c;子组件 <template><div :id"container id"></div> </template><script> export default {props: [url,…

Behavioral Fingerprinting of Large Language Models

Behavioral Fingerprinting of Large Language Models Authors: Zehua Pei, Hui-Ling Zhen, Ying Zhang, Zhiyuan Yang, Xing Li, Xianzhi Yu, Mingxuan Yuan, Bei Yu Deep-Dive Summary: 行为指纹识别大型语言模型 摘要 当前的大型语言模型&#xff08;LLMs&#xff09;基…

某互联网大厂的面试go语言从基础到实战的经验和总结

### 一面 #### 1. **实习项目**- 可以简要描述你的项目经历&#xff0c;最好是与职位相关的项目。如果是与技术栈相关的项目&#xff0c;比如 Go、C、Golang 或 Python&#xff0c;重点讲述项目中的技术细节和你如何解决问题。#### 2. **Go学习多久**- 说明你学习 Go 语言的时间…

掌握Java控制流:编程决策的艺术

控制流语句是用来 控制程序执行顺序 的关键工具&#xff0c;它们允许你根据不同的条件执行不同的代码块&#xff0c;或者重复执行某段代码。这使得程序能够根据输入和情况做出智能的决策&#xff0c;而不仅仅是线性的执行。1. 条件语句 (Conditional Statements)条件语句允许你…