小型论坛帖子管理系统是常见的Java Web实践项目,核心目标是实现帖子的全生命周期管理,包含发布、查询、修改、删除等基础功能,同时支持用户登录验证和权限控制。整个系统采用分层架构设计,降低模块间的耦合度,方便后续功能扩展。

技术选型与开发环境
开发小型论坛帖子管理系统可以选择成熟的后端技术栈,本文采用以下组合:
- 后端框架:Spring Boot 2.x,简化配置和依赖管理
- 持久层框架:MyBatis,灵活操作数据库
- 数据库:MySQL 8.0,存储用户和帖子数据
- 构建工具:Maven,管理项目依赖
- 运行环境:JDK 8及以上
数据库设计
系统核心需要两张表,分别是用户表和帖子表,结构设计如下:
| 表名 | 字段名 | 类型 | 说明 |
|---|---|---|---|
| user | id | bigint | 用户ID,主键自增 |
| username | varchar(50) | 用户名,唯一 | |
| password | varchar(100) | 加密后的密码 | |
| create_time | datetime | 注册时间 | |
| post | id | bigint | 帖子ID,主键自增 |
| user_id | bigint | 发帖用户ID,关联user表 | |
| title | varchar(200) | 帖子标题 | |
| content | text | 帖子内容 | |
| create_time | datetime | 发帖时间 | |
| update_time | datetime | 最后修改时间 |
核心功能实现
1. 帖子实体类定义
首先定义帖子的实体类,对应数据库post表的字段:
package com.example.forum.entity;
import java.util.Date;
public class Post {
private Long id;
private Long userId;
private String title;
private String content;
private Date createTime;
private Date updateTime;
// getter和setter方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
2. 帖子数据访问层
使用MyBatis的注解方式编写帖子表的增删改查接口:
package com.example.forum.mapper;
import com.example.forum.entity.Post;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface PostMapper {
// 新增帖子
@Insert("INSERT INTO post(user_id, title, content, create_time, update_time) " +
"VALUES(#{userId}, #{title}, #{content}, NOW(), NOW())")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(Post post);
// 根据ID查询帖子
@Select("SELECT * FROM post WHERE id = #{id}")
Post selectById(Long id);
// 查询所有帖子,按发帖时间倒序
@Select("SELECT * FROM post ORDER BY create_time DESC")
List<Post> selectAll();
// 根据ID更新帖子
@Update("UPDATE post SET title = #{title}, content = #{content}, update_time = NOW() WHERE id = #{id}")
int update(Post post);
// 根据ID删除帖子
@Delete("DELETE FROM post WHERE id = #{id}")
int deleteById(Long id);
}
3. 帖子服务层
服务层封装业务逻辑,调用数据访问层完成操作:
package com.example.forum.service;
import com.example.forum.entity.Post;
import com.example.forum.mapper.PostMapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PostService {
private final PostMapper postMapper;
public PostService(PostMapper postMapper) {
this.postMapper = postMapper;
}
// 发布帖子
public Post publishPost(Post post) {
postMapper.insert(post);
return post;
}
// 获取帖子详情
public Post getPostDetail(Long id) {
return postMapper.selectById(id);
}
// 获取所有帖子列表
public List<Post> getAllPosts() {
return postMapper.selectAll();
}
// 修改帖子
public boolean updatePost(Post post) {
return postMapper.update(post) > 0;
}
// 删除帖子
public boolean deletePost(Long id) {
return postMapper.deleteById(id) > 0;
}
}
4. 帖子控制层
控制层提供REST风格的接口,处理前端请求:
package com.example.forum.controller;
import com.example.forum.entity.Post;
import com.example.forum.service.PostService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/posts")
public class PostController {
private final PostService postService;
public PostController(PostService postService) {
this.postService = postService;
}
// 发布帖子接口
@PostMapping
public ResponseEntity<Post> createPost(@RequestBody Post post) {
Post savedPost = postService.publishPost(post);
return ResponseEntity.ok(savedPost);
}
// 获取帖子列表接口
@GetMapping
public ResponseEntity<List<Post>> getPostList() {
return ResponseEntity.ok(postService.getAllPosts());
}
// 获取帖子详情接口
@GetMapping("/{id}")
public ResponseEntity<Post> getPostDetail(@PathVariable Long id) {
Post post = postService.getPostDetail(id);
if (post == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(post);
}
// 修改帖子接口
@PutMapping("/{id}")
public ResponseEntity<Boolean> updatePost(@PathVariable Long id, @RequestBody Post post) {
post.setId(id);
boolean result = postService.updatePost(post);
return ResponseEntity.ok(result);
}
// 删除帖子接口
@DeleteMapping("/{id}")
public ResponseEntity<Boolean> deletePost(@PathVariable Long id) {
boolean result = postService.deletePost(id);
return ResponseEntity.ok(result);
}
}
系统测试
启动Spring Boot项目后,可以使用Postman等工具测试接口:
- 发送POST请求到
/api/posts,携带帖子标题和内容,即可完成发帖 - 发送GET请求到
/api/posts,可以获取所有帖子列表 - 发送GET请求到
/api/posts/1,可以获取ID为1的帖子详情 - 发送PUT请求到
/api/posts/1,可以修改ID为1的帖子内容 - 发送DELETE请求到
/api/posts/1,可以删除ID为1的帖子
以上就是一个基础的小型论坛帖子管理系统的核心实现,开发者可以在此基础上增加用户登录验证、帖子分页、评论功能等扩展模块,完善系统的使用体验。
JavaSpring_BootMyBatisMySQL论坛系统修改时间:2026-07-14 23:42:37