Springboot实战篇(1):项目概述及环境搭建

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);
    }
}
相关推荐
修炼成精1 小时前
C#实现的一个简单的软件保护方案
java·开发语言·c#
网安-轩逸1 小时前
网络安全——SpringBoot配置文件明文加密
spring boot·安全·web安全
乌云暮年2 小时前
算法刷题整理合集(四)
java·开发语言·算法·dfs·bfs
代码代码快快显灵2 小时前
SpringSecurity——如何获取当前登录用户的信息
java·开发语言·springsecurity
Luo_LA2 小时前
【排序算法对比】快速排序、归并排序、堆排序
java·算法·排序算法
果冻kk2 小时前
【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计
java·开发语言
佩奇的技术笔记2 小时前
高性能Java并发编程:线程池与异步编程最佳实践
java·性能优化
上官美丽2 小时前
Spring中的循环依赖问题是什么?
java·ide·spring boot
shangxianjiao2 小时前
nacos安装,服务注册,服务发现,远程调用3个方法
java·nacos·springboot