1 项目概述
1.1 用户模块
用户模块负责管理系统的用户信息,包括注册、登录、用户信息管理等功能。
1.1.1 用户注册
-
功能描述:新用户可以通过注册功能创建账号。
-
输入:
-
用户名
-
密码
-
邮箱
-
手机号(可选)
-
-
输出:
-
注册成功:返回用户 ID 和注册成功消息。
-
注册失败:返回错误信息(如用户名已存在、邮箱已注册等)。
-
1.1.2 用户登录
-
功能描述:用户通过用户名和密码登录系统。
-
输入:
-
用户名
-
密码
-
-
输出:
-
登录成功:返回 JWT Token 和用户基本信息。
-
登录失败:返回错误信息(如用户名或密码错误)。
-
1.1.3 获取用户详细信息
-
功能描述:获取当前登录用户的详细信息。
-
输入:
- 用户 ID(通过 Token 解析)
-
输出:
- 用户详细信息(用户名、邮箱、头像、注册时间等)。
1.1.4 更新用户基本信息
-
功能描述:用户可更新自己的基本信息(如用户名、邮箱、手机号等)。
-
输入:
-
用户名(可选)
-
邮箱(可选)
-
手机号(可选)
-
-
输出:
-
更新成功:返回成功消息。
-
更新失败:返回错误信息(如邮箱已存在)。
-
1.1.5 更新用户头像
-
功能描述:用户可上传并更新自己的头像。
-
输入:
- 头像文件(图片)
-
输出:
-
更新成功:返回新头像的 URL。
-
更新失败:返回错误信息(如文件格式不支持)。
-
1.1.6 更新用户密码
-
功能描述:用户可更新自己的登录密码。
-
输入:
-
旧密码
-
新密码
-
-
输出:
-
更新成功:返回成功消息。
-
更新失败:返回错误信息(如旧密码错误)。
-
1.2 文章分类模块
文章分类模块负责管理文章的分类信息,支持分类的增删改查操作。
1.2.1 文章分类列表
-
功能描述:获取所有文章分类的列表。
-
输入:
- 分页参数(页码、每页数量)
-
输出:
- 分类列表(分类 ID、分类名称、创建时间等)。
1.2.2 新增文章分类
-
功能描述:管理员可新增文章分类。
-
输入:
- 分类名称
-
输出:
-
新增成功:返回分类 ID 和成功消息。
-
新增失败:返回错误信息(如分类名称已存在)。
-
1.2.3 更新文章分类
-
功能描述:管理员可更新文章分类的名称。
-
输入:
-
分类 ID
-
新分类名称
-
-
输出:
-
更新成功:返回成功消息。
-
更新失败:返回错误信息(如分类名称已存在)。
-
1.2.4 获取文章分类详情
-
功能描述:获取指定分类的详细信息。
-
输入:
- 分类 ID
-
输出:
- 分类详情(分类 ID、分类名称、创建时间等)。
1.2.5 删除文章分类
-
功能描述:管理员可删除指定的文章分类。
-
输入:
- 分类 ID
-
输出:
-
删除成功:返回成功消息。
-
删除失败:返回错误信息(如分类下存在文章)。
-
1.3 文章管理模块
文章管理模块负责管理文章的增删改查操作,支持条件查询和分页。
1.3.1 新增文章
-
功能描述:用户可新增一篇文章。
-
输入:
-
标题
-
内容
-
分类 ID
-
标签(可选)
-
-
输出:
-
新增成功:返回文章 ID 和成功消息。
-
新增失败:返回错误信息(如分类不存在)。
-
1.3.2 更新文章
-
功能描述:用户可更新自己发布的文章。
-
输入:
-
文章 ID
-
新标题(可选)
-
新内容(可选)
-
新分类 ID(可选)
-
-
输出:
-
更新成功:返回成功消息。
-
更新失败:返回错误信息(如文章不存在或用户无权限)。
-
1.3.3 获取文章详情
-
功能描述:获取指定文章的详细信息。
-
输入:
- 文章 ID
-
输出:
- 文章详情(标题、内容、分类、作者、创建时间等)。
1.3.4 删除文章
-
功能描述:用户可删除自己发布的文章。
-
输入:
- 文章 ID
-
输出:
-
删除成功:返回成功消息。
-
删除失败:返回错误信息(如文章不存在或用户无权限)。
-
1.3.5 文章列表(条件分类)
-
功能描述:根据条件查询文章列表,支持分页。
-
输入:
-
分类 ID(可选)
-
关键词(可选,用于标题或内容搜索)
-
分页参数(页码、每页数量)
-
-
输出:
- 文章列表(文章 ID、标题、分类、作者、创建时间等)。
1.4 其他功能
1.4.1 权限管理
-
用户只能管理自己的文章。
-
管理员可管理所有文章和分类。
1.4.2 数据校验
-
使用 Spring Validation 对输入数据进行校验。
-
校验规则包括:
-
用户名、密码长度限制。
-
邮箱格式校验。
-
文件格式校验(头像上传)。
-
1.4.3 缓存管理
- 使用 Redis 缓存文章列表和分类列表,提升系统性能。
1.4.4 单元测试
- 使用 JUnit 对核心功能进行单元测试,确保代码质量。
2 环境搭建
2.1 执行sql语句,准备数据库表
XML
-- 创建数据库
create database big_event;
-- 使用数据库
use big_event;
-- 用户表
create table user (
id int unsigned primary key auto_increment comment 'ID',
username varchar(20) not null unique comment '用户名',
password varchar(32) comment '密码',
nickname varchar(10) default '' comment '昵称',
email varchar(128) default '' comment '邮箱',
user_pic varchar(128) default '' comment '头像',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间'
) comment '用户表';
-- 分类表
create table category(
id int unsigned primary key auto_increment comment 'ID',
category_name varchar(32) not null comment '分类名称',
category_alias varchar(32) not null comment '分类别名',
create_user int unsigned not null comment '创建人ID',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间',
constraint fk_category_user foreign key (create_user) references user(id) -- 外键约束
);
-- 文章表
create table article(
id int unsigned primary key auto_increment comment 'ID',
title varchar(30) not null comment '文章标题',
content varchar(10000) not null comment '文章内容',
cover_img varchar(128) not null comment '文章封面',
state varchar(3) default '草稿' comment '文章状态: 只能是[已发布] 或者 [草稿]',
category_id int unsigned comment '文章分类ID',
create_user int unsigned not null comment '创建人ID',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间',
constraint fk_article_category foreign key (category_id) references category(id),-- 外键约束
constraint fk_article_user foreign key (create_user) references user(id) -- 外键约束
)
2.2 创建springboot工程
2.3 引入依赖
XML
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- Lombok(可选) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
2.4 配置 application.yml
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/big_event
username: root
password: 123456
2.5 创建包结构

2.6 准备实体类
java
public class Article {
private Integer id;//主键ID
private String title;//文章标题
private String content;//文章内容
private String coverImg;//封面图像
private String state;//发布状态 已发布|草稿
private Integer categoryId;//文章分类id
private Integer createUser;//创建人ID
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
public class Category {
private Integer id;//主键ID
private String categoryName;//分类名称
private String categoryAlias;//分类别名
private Integer createUser;//创建人ID
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
public class User {
private Integer id;//主键ID
private String username;//用户名
private String password;//密码
private String nickname;//昵称
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
2.7 启动类
java
@SpringBootApplication
public class MyEventApplication {
public static void main(String[] args) {
SpringApplication.run(MyEventApplication.class, args);
}
}