代码:
WYend/Myblog_springbook3: 我的第一个个人网站(后端版)
随时更新
一、数据库的构建
交给ai
二、各类注解
Lombok注解
- @Data:
- 自动生成类的
getter
、setter
、toString()
、equals()
、hashCode()
方法 - 适用于实体类(与数据库表映射的类)、数据传输对象(DTO)、值对象(VO)等纯数据载体类
- 自动生成类的
- @EqualsAndHashCode(callSuper = false)
- 自动生成
equals()
和hashCode()
方法,表示生成这两个方法时不包含父类的属性(仅比较当前类的字段)。 - 实体类继承自基类,且
equals/hashCode
的判断只需要关注当前类的核心字段(如id
、username
),无需考虑父类属性时。
- 自动生成
- @Accessors(chain = true)
- 修改
setter
方法的生成逻辑,chain = true
让setter
方法返回当前对象(而非void
),支持链式调用。 - 需要频繁设置多个属性时(如对象初始化、参数组装),尤其适合构建器模式(Builder)的简化替代
user.setName("张三").setAge(20).setEmail("test@xxx.com")
- 修改
MyBatis-Plus 注解
- @TableName(“user”)
mybatis-plus CRUD扩展:雪花算法、自动填充策略、乐观锁-CSDN博客
三、MVC架构
User实体类
对应数据库表
UserMapper
继承BaseMapper,并传入User实体
Service
UserService
- 继承Iservice类,实现通用CRUD
- 实现了:获取所有用户、获取用户、创建、删除、更新、改变用户状态的方法,通过传入id或DTO数据
UserServiceImpl
- 通过baseMapper的查询方法和mybatis-plus的条件构造器(
QueryWrapper
)实现了checkUsername
和checkEmail
两个自定义查询方法 - 整体使用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方法 | 路径 | 功能描述 |
---|---|---|---|
getAllUsers | GET | /api/users | 查询所有用户列表 |
getUserById | GET | /api/users/{id} | 根据ID查询单个用户 |
createUser | POST | /api/users | 新增用户 |
updateUser | PUT | /api/users/{id} | 根据ID全量更新用户信息 |
deleteUser | DELETE | /api/users/{id} | 根据ID删除用户 |
changeUserStatus | PATCH | /api/users/{id}/status | 部分更新(仅修改用户状态) |
四、关键技术细节
-
请求参数处理:
@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
)。
-
响应处理:
- 使用
ResponseEntity
封装HTTP响应,包含状态码、响应体等信息:ResponseEntity.ok(...)
:返回200 OK状态,附带响应数据(如用户列表、单个用户)。ResponseEntity.notFound().build()
:返回404 Not Found(用户不存在时)。ResponseEntity.badRequest().body(...)
:返回400 Bad Request,附带错误信息(如操作失败原因)。
- 使用
-
API文档支持:
@Operation
:描述单个接口的功能(如summary
为简要说明,description
为详细描述)。@Parameter
:描述接口参数(如是否必填、示例值),用于自动生成Swagger文档,方便前端对接。
-
异常处理:
- 对
createUser
、updateUser
等方法添加try-catch
,捕获服务层抛出的RuntimeException
,将异常信息通过响应体返回给前端,避免接口直接报错崩溃。
- 对
总结:这个UserController
是用户模块的入口,通过标准化的API接口对外提供用户管理功能,同时通过依赖注入、异常处理等机制保证了代码的灵活性和健壮性。