从0到1独立开发一个论坛项目(一)

一.明确项目开发流程

  1. 编写需求文档

  2. 设计数据库表结构

  3. 定义项目接口清单

  4. 搭建项目框架环境

  5. 创建数据库实体类

  6. 编写 Controller 接口

  7. 编写 Service 业务逻辑

  8. 编写Mapper 数据操作

  9. 进行接口功能测试

  10. 开发前端页面

  11. 修复 BUG 优化功能

  12. 项目部署上线发布

二.编写需求文档​​​​​

校园交流论坛项目需求文档(第一版)

1. 项目的核心目标

定位:校园交流论坛,用于学生之间发布、查看、交流信息。

用途:个人独立开发、积累完整项目经验、可写进简历,后期可正式上线使用。

使用场景:校内信息分享、学习交流、生活求助、兴趣讨论。

预期效果:支持日常几百人同时访问,运行稳定,核心流程无卡顿。

开发边界:先做最小可用版本,不做复杂高并发功能,不使用微服务。

2. 项目包含哪些用户角色

游客(未登录用户)

普通注册用户

管理员

3. 每个角色的核心需求

游客:浏览板块、查看帖子列表、查看帖子详情。

普通用户:注册、登录、修改密码;发帖、编辑自己的帖子、删除自己的帖子;查看个人中心、查看自己发的帖子。

管理员:管理用户(启用 / 禁用);审核帖子、删除违规帖子;管理论坛板块;查看基础数据。

4. 每个需求对应什么具体功能

; 用户与登录模块最后写。

发帖:填写标题、内容,选择板块,提交发布。

编辑帖子:仅可修改自己的帖子,修改后重新提交。

删除帖子:仅可删除自己的帖子,删除前确认。

浏览帖子:按时间倒叙展示

管理员审核帖子:查看待审核列表,通过 / 驳回并填写原因。

管理员管理用户:查看用户列表,可禁用 / 启用账号。

管理员管理板块:新增、修改、删除板块。

5. 项目需要哪些页面

注册页面

登录页面

忘记密码页面

论坛首页(板块列表)

板块帖子列表页

帖子详情页

发帖 / 编辑帖子页

个人中心页

管理员后台首页

管理员用户管理页

管理员帖子审核页

管理员板块管理页

6. 哪些功能必须做,哪些暂时不做

必须做(核心功能)

用户注册、登录、密码重置

发帖、编辑、删除自己的帖子

帖子浏览、详情查看

管理员审核帖子

管理员管理用户、管理板块

暂时不做(后续迭代)

评论、点赞、收藏

图片上传、附件上传

私信、通知

搜索、排序、置顶、精华

积分、等级、签到

敏感词过滤、验证码

7. 各角色的权限边界如何划分

游客:只能浏览,不能发帖、编辑、删除。

普通用户:只能管理自己的帖子,不能操作他人帖子,不能进后台。

管理员:拥有全部后台权限,可管理所有用户、所有帖子、所有板块。

越权处理:访问无权限接口,返回 "无操作权限"。

8. 功能的异常场景如何处理

登录:用户名不存在、密码错误、账号被禁用,给出对应提示。

注册:用户名已存在、密码不一致、格式错误,拦截并提示。

发帖:标题或内容为空,不允许提交。

编辑 / 删除:不是本人帖子,提示无权限。

审核:帖子已被删除,提示 "帖子不存在"。

系统异常:统一提示 "系统异常,请稍后再试"。

9. 项目的交互逻辑有哪些核心要求

帖子默认按最新发布时间倒序展示。

登录后跳转到首页。

发帖成功后跳转到帖子详情页。

删除操作必须二次确认。

管理员审核后,帖子状态同步更新。

页面操作后给出明确成功 / 失败提示。

三.设计数据库表结构

1.用户表

复制代码
id            INT 主键 自增
username      VARCHAR(50)  用户名(唯一)
password      VARCHAR(100) 密码
status        TINYINT      0=禁用 1=正常
role          TINYINT      0=普通用户 1=管理员
create_time   DATETIME

2.板块表

复制代码
id            INT 主键 自增
name          VARCHAR(50)  板块名称(如:学习交流、生活求助)
intro         VARCHAR(255) 板块介绍
create_time   DATETIME

3.帖子表

复制代码
id            INT 主键 自增
title         VARCHAR(100) 帖子标题
content       TEXT         帖子内容
user_id       INT          发布人ID
board_id      INT          所属板块ID(关联板块表)
status        TINYINT      0=待审核 1=已通过 2=已驳回
create_time   DATETIME
update_time   DATETIME

4.审核表

复制代码
id            INT 主键 自增
post_id       INT  帖子ID
admin_id      INT  管理员ID
reason        VARCHAR(255) 驳回原因
status        TINYINT 1=通过 2=驳回
audit_time    DATETIME

四.定义项目接口清单

<1>分析接口

1、用户模块接口(最后开发)

  1. 用户登录接口功能:用户输入用户名密码,完成登录
  2. 用户注册接口功能:新用户注册账号
  3. 密码重置接口功能:忘记密码,重置密码
  4. 获取当前登录用户信息接口功能:获取登录状态、用户名、角色权限

2、板块模块接口

  1. 查询所有板块列表接口功能:首页展示所有论坛板块
  2. 查询单个板块详情接口功能:进入板块,查看板块信息
  3. 管理员新增板块接口功能:管理员添加新板块
  4. 管理员修改板块接口功能:编辑板块名称、简介
  5. 管理员删除板块接口功能:删除无用板块

3、帖子模块接口(核心)

  1. 发布帖子接口功能:登录用户发布新帖子
  2. 修改自己的帖子接口功能:仅发布者可编辑自己的帖子
  3. 删除自己的帖子接口功能:仅发布者可删除自己的帖子
  4. 查询帖子列表接口功能:按时间倒序展示所有帖子
  5. 查询单个板块下的帖子列表接口功能:查看某个板块里的全部帖子
  6. 查询帖子详情接口功能:查看帖子完整内容

4、管理员审核接口

  1. 查询待审核帖子列表接口功能:管理员查看需要审核的帖子
  2. 审核帖子通过接口功能:管理员同意帖子发布
  3. 审核帖子驳回接口功能:管理员拒绝帖子,并填写原因
  4. 管理员删除任意帖子接口功能:删除违规内容

5、用户管理接口(管理员)

  1. 查询所有用户列表接口功能:管理员查看全部用户
  2. 禁用用户账号接口功能:禁止违规用户登录
  3. 启用用户账号接口功能:恢复被禁用用户

6、个人中心接口

  1. 查询自己发布的所有帖子接口功能:个人中心展示我的帖子

<2>生成接口文档

@1、用户模块接口(最后开发)

1. 用户登录接口
  • 接口地址:/user/login
  • 请求方式:POST
  • 功能说明:用户输入用户名密码完成登录
  • 请求参数:
    • username:用户名
    • password:密码
  • 返回结果:Result.success(用户信息)
2. 用户注册接口
  • 接口地址:/user/register
  • 请求方式:POST
  • 功能说明:新用户注册账号
  • 请求参数:
    • username:用户名
    • password:密码
    • phone:手机号
  • 返回结果:Result.success()
3. 密码重置接口
  • 接口地址:/user/resetPassword
  • 请求方式:POST
  • 功能说明:忘记密码,重置密码
  • 请求参数:
    • username:用户名
    • newPassword:新密码
  • 返回结果:Result.success()
4. 获取当前登录用户信息接口
  • 接口地址:/user/info
  • 请求方式:GET
  • 功能说明:获取登录状态、用户名、角色权限
  • 返回结果:Result.success(用户信息)

@2、板块模块接口

1. 查询所有板块列表接口
  • 接口地址:/category/list
  • 请求方式:GET
  • 功能说明:首页展示所有论坛板块
  • 返回结果:Result.success(板块列表)
2. 查询单个板块详情接口
  • 接口地址:/category/get/{id}
  • 请求方式:GET
  • 功能说明:进入板块,查看板块信息
  • 返回结果:Result.success(板块详情)
3. 管理员新增板块接口
  • 接口地址:/category/add
  • 请求方式:POST
  • 功能说明:管理员添加新板块
  • 请求参数:name、description
  • 返回结果:Result.success()
4. 管理员修改板块接口
  • 接口地址:/category/update
  • 请求方式:POST
  • 功能说明:编辑板块名称、简介
  • 返回结果:Result.success()
5. 管理员删除板块接口
  • 接口地址:/category/delete/{id}
  • 请求方式:DELETE
  • 功能说明:删除无用板块
  • 返回结果:Result.success()

@3、帖子模块接口(核心)

1. 发布帖子接口
  • 接口地址:/post/add
  • 请求方式:POST
  • 功能说明:登录用户发布新帖子
  • 请求参数:title、content、categoryId
  • 返回结果:Result.success()
2. 修改自己的帖子接口
  • 接口地址:/post/update
  • 请求方式:POST
  • 功能说明:仅发布者可编辑自己的帖子
  • 返回结果:Result.success()
3. 删除自己的帖子接口
  • 接口地址:/post/delete/{id}
  • 请求方式:DELETE
  • 功能说明:仅发布者可删除自己的帖子
  • 返回结果:Result.success()
4. 查询帖子列表接口
  • 接口地址:/post/list
  • 请求方式:GET
  • 功能说明:按时间倒序展示所有帖子
  • 返回结果:Result.success(帖子列表)
5. 查询单个板块下的帖子列表接口
  • 接口地址:/post/listByCategory/{categoryId}
  • 请求方式:GET
  • 功能说明:查看某个板块里的全部帖子
  • 返回结果:Result.success(帖子列表)
6. 查询帖子详情接口
  • 接口地址:/post/get/{id}
  • 请求方式:GET
  • 功能说明:查看帖子完整内容
  • 返回结果:Result.success(帖子详情)

@4、管理员审核接口

1. 查询待审核帖子列表接口
  • 接口地址:/post/auditList
  • 请求方式:GET
  • 功能说明:管理员查看需要审核的帖子
  • 返回结果:Result.success(列表)
2. 审核帖子通过接口
  • 接口地址:/post/auditPass/{id}
  • 请求方式:POST
  • 功能说明:管理员同意帖子发布
  • 返回结果:Result.success()
3. 审核帖子驳回接口
  • 接口地址:/post/auditReject
  • 请求方式:POST
  • 功能说明:管理员拒绝帖子,并填写原因
  • 请求参数:id、reason
  • 返回结果:Result.success()
4. 管理员删除任意帖子接口
  • 接口地址:/post/adminDelete/{id}
  • 请求方式:DELETE
  • 功能说明:删除违规内容
  • 返回结果:Result.success()

@5、用户管理接口(管理员)

1. 查询所有用户列表接口
  • 接口地址:/admin/user/list
  • 请求方式:GET
  • 功能说明:管理员查看全部用户
  • 返回结果:Result.success(用户列表)
2. 禁用用户账号接口
  • 接口地址:/admin/user/disable/{id}
  • 请求方式:POST
  • 功能说明:禁止违规用户登录
  • 返回结果:Result.success()
3. 启用用户账号接口
  • 接口地址:/admin/user/enable/{id}
  • 请求方式:POST
  • 功能说明:恢复被禁用用户
  • 返回结果:Result.success()

@6、个人中心接口

1. 查询自己发布的所有帖子接口
  • 接口地址:/user/myPosts
  • 请求方式:GET
  • 功能说明:个人中心展示我的帖子
  • 返回结果:Result.success(我的帖子列表)

<3>效果图

五.搭建项目框架环境1.创建springboot项目

上图仅供参考,具体请看下面

1.创建springboot项目

2.勾选依赖

<1>spring web

<2>MySQL Driver

<3>MyBatis Framework

3.配置数据库

复制代码
# 1. 数据库连接地址 # localhost=本机 3306=MySQL端口 campushub=数据库名 spring.datasource.url=jdbc:mysql://localhost:3306/campushub?useSSL=false&serverTimezone=UTC # 2. 数据库用户名(默认都是root) spring.datasource.username=root # 3. 数据库密码(你自己的密码) spring.datasource.password=1234 # 4. 数据库驱动(固定写法,不用改) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 5. MyBatis映射文件路径(固定写法,不用改) mybatis.mapper-locations=classpath:mapper/*.xml

4.创建数据库表

复制代码
-- 使用你的项目数据库


-- ==============================
-- 1. 用户表
-- ==============================
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '账号',
    password VARCHAR(100) NOT NULL COMMENT '密码',
    nickname VARCHAR(50) COMMENT '昵称',
    create_time DATETIME DEFAULT NOW() COMMENT '创建时间'
) COMMENT = '用户表';

-- ==============================
-- 2. 帖子表
-- ==============================
CREATE TABLE post (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '帖子ID',
    title VARCHAR(200) NOT NULL COMMENT '标题',
    content TEXT NOT NULL COMMENT '内容',
    user_id INT COMMENT '发布人ID',
    create_time DATETIME DEFAULT NOW() COMMENT '发布时间',
    FOREIGN KEY (user_id) REFERENCES user(id)
) COMMENT = '帖子表';

-- ==============================
-- 3. 评论表
-- ==============================
CREATE TABLE comment (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '评论ID',
    content VARCHAR(500) NOT NULL COMMENT '评论内容',
    post_id INT COMMENT '所属帖子ID',
    user_id INT COMMENT '评论人ID',
    create_time DATETIME DEFAULT NOW() COMMENT '评论时间',
    FOREIGN KEY (post_id) REFERENCES post(id),
    FOREIGN KEY (user_id) REFERENCES user(id)
) COMMENT = '评论表';

5.创建controller,service,mapper,entity,common包

六.创建数据库实体类

1.创建实体类对象

comment

复制代码
package com.campus.campushub.entity;

import lombok.Data;
import java.time.LocalDateTime;

@Data
public class Comment {
    private Long id;
    private Long postId;    // 帖子ID
    private Long userId;    // 评论人ID
    private String content; // 评论内容
    private LocalDateTime createTime;
}

post

复制代码
package com.campus.campushub.entity;

import lombok.Data;
import java.time.LocalDateTime;

@Data
public class Post {
    private Long id;
    private Long userId;      // 发布人ID
    private String title;     // 标题
    private String content;   // 内容
    private LocalDateTime createTime;
}

user

复制代码
package com.campus.campushub.entity;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String username;
    private String password;
    private String phone;
    private String avatar;
}

2.创建Result对象

复制代码
package com.campus.campushub.common;

import lombok.Data;

/**
 * 统一返回结果类
 * 所有接口都用这个返回
 */
@Data
public class Result<T> {

    // 响应状态码:200成功  500失败
    private Integer code;

    // 响应消息
    private String msg;

    // 响应数据
    private T data;

    // 成功返回(不带数据)
    public static <T> Result<T> success() {
        Result<T> result = new Result<>();
        result.setCode(200);
        result.setMsg("操作成功");
        return result;
    }

    // 成功返回(带数据)
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setCode(200);
        result.setMsg("操作成功");
        result.setData(data);
        return result;
    }

    // 失败返回
    public static <T> Result<T> error(String msg) {
        Result<T> result = new Result<>();
        result.setCode(500);
        result.setMsg(msg);
        return result;
    }
}

3.效果图

相关推荐
BioRunYiXue2 小时前
从现象到机制:蛋白降解调控研究的系统策略与实验设计
java·linux·运维·服务器·网络·人工智能·eclipse
希望永不加班2 小时前
如何在 SpringBoot 里自定义 Spring MVC 配置
java·spring boot·后端·spring·mvc
weixin199701080162 小时前
“迷你京东”全栈架构设计与实现
java·大数据·python·数据库架构
API开发2 小时前
一个MCP操作所有的数据库
数据库·api·api接口·apisql·mcp·mcpserver·openclaw
东离与糖宝2 小时前
3月20日紧急修复|Spring AI双漏洞CVE-2026-22730/22729实战防护方案
java
东离与糖宝2 小时前
Spring Boot 4.0适配JDK 26|一键升级与常见坑速解
java
zone7_2 小时前
008-01:RAG 入门-向量存储与企业级向量数据库 milvus
数据库·milvus
大傻^2 小时前
Spring AI Alibaba MCP协议实战:模型上下文协议集成与工具调用
java·人工智能·后端·spring·elasticsearch·springaialibaba