# forum **Repository Path**: wang_steadfast/forum ## Basic Information - **Project Name**: forum - **Description**: 基于Spring的论坛系统 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-21 - **Last Updated**: 2026-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 知行论坛 (ZhiXing Forum) 一个基于 Spring Boot 的中文社区论坛系统,支持用户注册登录、发帖、回帖、点赞、站内信等核心论坛功能。 ## 技术栈 | 组件 | 技术 | 版本 | |---|---|---| | 后端框架 | Spring Boot | 3.5.12 | | JDK | Java | 17 | | 数据库 | MySQL | - | | ORM | MyBatis-Plus | 3.5.15 | | 连接池 | Alibaba Druid | 1.2.24 | | 构建工具 | Maven | (含 Wrapper) | | 前端 UI | Tabler | - | | Markdown 编辑器 | Editor.md | - | | 工具库 | Lombok、Apache Commons Codec | - | ## 项目结构 ``` Spring-forum/ ├── pom.xml ├── mvnw / mvnw.cmd ├── src/main/ │ ├── java/com/example/springforum/ │ │ ├── SpringForumApplication.java # 启动入口 │ │ ├── config/ │ │ │ └── WebConfig.java # 拦截器注册配置 │ │ ├── controller/ # 控制器层 │ │ │ ├── UserController.java # 用户相关接口 │ │ │ ├── ArticleController.java # 帖子相关接口 │ │ │ ├── ArticleReplyController.java # 回复相关接口 │ │ │ ├── BoardController.java # 板块相关接口 │ │ │ ├── MessageController.java # 站内信相关接口 │ │ │ └── TestController.java # 健康检查接口 │ │ ├── service/ # 业务逻辑层 │ │ │ ├── IUserService.java │ │ │ ├── IArticleService.java │ │ │ ├── IArticleReplyService.java │ │ │ ├── IBoardService.java │ │ │ ├── IHotBoardService.java │ │ │ ├── IMessageService.java │ │ │ └── impl/ # 业务实现类 │ │ ├── mapper/ # MyBatis Mapper 接口 │ │ ├── model/ # 实体类 │ │ │ ├── User.java │ │ │ ├── Article.java │ │ │ ├── ArticleReply.java │ │ │ ├── ArticleLike.java │ │ │ ├── Board.java │ │ │ ├── HotBoard.java │ │ │ ├── Message.java │ │ │ └── ArticleVO.java │ │ ├── common/ # 通用组件 │ │ │ ├── constants/ # 常量 & 枚举 │ │ │ ├── enums/ResultCode.java # 响应状态码枚举 │ │ │ ├── request/ # 请求 DTO │ │ │ └── response/Result.java # 统一响应封装 │ │ ├── exception/ # 全局异常处理 │ │ ├── interceptor/LoginInterceptor.java # 登录拦截器 │ │ └── utils/ # 工具类 (MD5, UUID, etc.) │ └── resources/ │ ├── application.yml # 应用配置 │ ├── mapper/ # MyBatis XML 映射文件 │ └── static/ # 前端静态页面 │ ├── index.html # 首页 │ ├── sign-in.html # 登录页 │ ├── sign-up.html # 注册页 │ ├── article.html # 发帖页 │ ├── article_edit.html # 编辑帖子页 │ ├── article_list.html # 帖子列表页 │ ├── details.html # 帖子详情页 │ ├── profile.html # 用户主页 │ ├── settings.html # 用户设置页 │ ├── js/common.js # 公共 JS │ ├── dist/css/ # Tabler CSS │ └── dist/editor.md/ # Editor.md 编辑器 ``` ## 功能模块 ### 用户模块 - 用户注册(用户名 + 昵称 + 密码,密码使用 MD5 + UUID 盐值加密) - 用户登录 / 登出(基于 HttpSession 的会话管理) - 查看用户个人信息(支持查看自己和他人主页) - 修改个人资料(用户名、昵称、手机号、邮箱、性别、简介) - 修改密码(需验证旧密码) ### 帖子模块 - 发布帖子(支持 Markdown 格式,选择所属板块) - 帖子列表(首页展示 / 按板块筛选) - 帖子详情(自动累加浏览量,标记是否为作者) - 编辑帖子(仅作者可操作) - 删除帖子(软删除,仅作者可操作) - 点赞 / 取消点赞(通过 t_article_like 记录实现 toggle) - 查看指定用户的帖子列表 ### 回复模块 - 对帖子发表回复(自动累加帖子回复数) - 查看帖子的所有回复(关联回复者用户信息) ### 板块模块 - 获取首页板块列表(默认展示 9 个板块) - 根据 ID 获取板块信息 - 获取热门板块排行(按帖子数排序) ### 站内信模块 - 向指定用户发送私信 - 获取未读消息数量 - 查看收到的所有私信(关联发送者信息) - 标记消息为已读 - 回复私信 ## 数据库设计 所有表使用 `t_` 前缀,采用逻辑删除(`is_deleted` 字段)。 ### t_user(用户表) | 字段 | 类型 | 说明 | |---|---|---| | id | INT | 主键,自增 | | username | VARCHAR | 用户名(唯一) | | password | VARCHAR | 密码(MD5 加盐加密) | | nickname | VARCHAR | 昵称 | | phone_num | VARCHAR | 手机号 | | email | VARCHAR | 邮箱 | | gender | TINYINT | 性别(0-女,1-男,2-保密) | | salt | VARCHAR | 密码盐值(UUID) | | avatar_url | VARCHAR | 头像地址 | | article_count | INT | 发帖数 | | is_admin | TINYINT | 是否管理员(0-否,1-是) | | remark | VARCHAR | 个人简介 | | status | TINYINT | 状态(0-正常,1-封禁) | | is_deleted | TINYINT | 逻辑删除(0-正常,1-已删除) | | create_time | TIMESTAMP | 创建时间 | | update_time | TIMESTAMP | 更新时间 | ### t_article(帖子表) | 字段 | 类型 | 说明 | |---|---|---| | id | INT | 主键,自增 | | board_id | INT | 所属板块 ID | | user_id | INT | 作者 ID | | title | VARCHAR | 帖子标题 | | content | LONGTEXT | 帖子内容(Markdown) | | visit_count | INT | 浏览量 | | reply_count | INT | 回复数 | | like_count | INT | 点赞数 | | status | TINYINT | 状态(0-正常,1-封禁) | | is_deleted | TINYINT | 逻辑删除 | | create_time | TIMESTAMP | 创建时间 | | update_time | TIMESTAMP | 更新时间 | ### t_article_reply(回复表) | 字段 | 类型 | 说明 | |---|---|---| | id | INT | 主键,自增 | | article_id | INT | 所属帖子 ID | | post_user_id | INT | 回复者 ID | | content | VARCHAR | 回复内容 | | like_count | INT | 点赞数 | | status | TINYINT | 状态 | | is_deleted | TINYINT | 逻辑删除 | | create_time | TIMESTAMP | 创建时间 | | update_time | TIMESTAMP | 更新时间 | ### t_article_like(点赞表) | 字段 | 类型 | 说明 | |---|---|---| | id | INT | 主键,自增 | | user_id | INT | 用户 ID | | article_id | INT | 帖子 ID | | create_time | TIMESTAMP | 创建时间 | ### t_board(板块表) | 字段 | 类型 | 说明 | |---|---|---| | id | INT | 主键,自增 | | name | VARCHAR | 板块名称 | | article_count | INT | 帖子数量 | | sort | INT | 排序权重 | | status | TINYINT | 状态 | | is_deleted | TINYINT | 逻辑删除 | | create_time | TIMESTAMP | 创建时间 | | update_time | TIMESTAMP | 更新时间 | ### t_message(站内信表) | 字段 | 类型 | 说明 | |---|---|---| | id | INT | 主键,自增 | | post_user_id | INT | 发送者 ID | | receive_user_id | INT | 接收者 ID | | content | VARCHAR | 消息内容 | | status | TINYINT | 状态(0-未读,1-已读,2-已回复) | | is_deleted | TINYINT | 逻辑删除 | | create_time | TIMESTAMP | 创建时间 | | update_time | TIMESTAMP | 更新时间 | ## API 接口 所有接口返回统一 JSON 格式: ```json { "code": 0, "message": "success", "data": {} } ``` ### 用户接口 `/user` | 方法 | 路径 | 说明 | |---|---|---| | POST | `/user/register` | 用户注册 | | POST | `/user/login` | 用户登录 | | GET | `/user/logout` | 用户登出 | | GET | `/user/getUserInfo` | 获取用户信息 | | POST | `/user/modify` | 修改个人资料 | | POST | `/user/modifyPassword` | 修改密码 | ### 帖子接口 `/article` | 方法 | 路径 | 说明 | |---|---|---| | POST | `/article/create` | 发布帖子 | | POST | `/article/createByObject` | 发布帖子(JSON Body) | | GET | `/article/getArticleList` | 获取帖子列表 | | GET | `/article/detail` | 获取帖子详情 | | POST | `/article/modify` | 编辑帖子 | | POST | `/article/delete` | 删除帖子 | | POST | `/article/thumb` | 点赞/取消点赞 | | GET | `/article/getListByUserId` | 获取用户帖子列表 | ### 回复接口 `/articleReply` | 方法 | 路径 | 说明 | |---|---|---| | POST | `/articleReply/create` | 发表回复 | | GET | `/articleReply/getList` | 获取帖子回复列表 | ### 板块接口 `/board` | 方法 | 路径 | 说明 | |---|---|---| | GET | `/board/getBoardList` | 获取板块列表 | | GET | `/board/selectById` | 获取板块详情 | | GET | `/board/getHotBoardList` | 获取热门板块排行 | ### 站内信接口 `/message` | 方法 | 路径 | 说明 | |---|---|---| | POST | `/message/sent` | 发送私信 | | GET | `/message/getUnReadCount` | 获取未读消息数 | | GET | `/message/getAll` | 获取所有收到的私信 | | POST | `/message/markRead` | 标记消息已读 | | POST | `/message/reply` | 回复私信 | ## 快速启动 ### 环境要求 - JDK 17+ - MySQL 5.7+ / 8.0+ - Maven 3.6+(或使用项目自带的 `mvnw`) ### 1. 准备数据库 ```sql CREATE DATABASE forum_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` 然后手动建表(表名需以 `t_` 为前缀),参照上方「数据库设计」章节。 ### 2. 修改配置 编辑 `src/main/resources/application.yml`,按需修改数据库连接信息: ```yaml spring: datasource: url: jdbc:mysql://127.0.0.1:3306/forum_db?useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 ``` ### 3. 构建运行 ```bash # 使用 Maven Wrapper 构建 ./mvnw clean package # 运行 java -jar target/Spring-forum-0.0.1-SNAPSHOT.jar ``` 或者直接在 IDE 中运行 `SpringForumApplication.java` 的 `main` 方法。 ### 4. 访问 浏览器打开 [http://localhost:58080](http://localhost:58080) ## 架构说明 ``` ┌─────────────┐ HTTP ┌──────────────────┐ │ 浏览器前端 │ ◄──────────► │ Spring Boot │ │ (HTML+AJAX) │ │ 内嵌 Tomcat │ └─────────────┘ └────────┬─────────┘ │ ┌─────────▼─────────┐ │ Controller 层 │ │ (REST API 接口) │ └─────────┬─────────┘ │ ┌─────────▼─────────┐ │ Service 层 │ │ (业务逻辑处理) │ └─────────┬─────────┘ │ ┌─────────▼─────────┐ │ Mapper 层 │ │ (MyBatis-Plus) │ └─────────┬─────────┘ │ ┌─────────▼─────────┐ │ MySQL 数据库 │ │ (forum_db) │ └───────────────────┘ ``` - **分层架构**:Controller -> Service(接口 + 实现)-> Mapper(MyBatis-Plus BaseMapper + 自定义 XML) - **认证方式**:基于 HttpSession + 自定义 `LoginInterceptor` 拦截器 - **统一响应**:`Result` 封装,含 `code`、`message`、`data` 字段 - **异常处理**:`GlobalExceptionHandler` 全局捕获 `ApplicationException` 和通用异常 - **逻辑删除**:所有实体通过 `is_deleted` 字段实现软删除 ## 内置板块 系统预置 9 个讨论板块: | 序号 | 板块名称 | |---|---| | 1 | JAVA | | 2 | C++ | | 3 | 前端技术 | | 4 | MySQL | | 5 | 面试宝典 | | 6 | 经验分享 | | 7 | 招聘信息 | | 8 | 福利待遇 | | 9 | 灌水区 | ## 许可证 本项目仅供学习交流使用。