以下是基于Java开发的个人日记本系统实现方案,涵盖技术选型、功能模块、数据库设计及核心实现思路:
一、系统架构
采用经典的 MVC三层架构:
- 前端:HTML + CSS + JavaScript(可选Thymeleaf模板引擎或Vue.js)
- 后端:Spring Boot + Spring Security
- 数据库:MySQL/H2(嵌入式数据库)
- 其他:Maven/Gradle(项目管理)、MyBatis/JPA(持久层)
二、功能模块
1. 用户模块
- 注册/登录/登出
- 密码加密存储(BCrypt)
- 用户信息修改
2. 日记模块
- 日记创建、编辑、删除、查看
- 日记分类(工作、生活、学习等)
- 富文本编辑(集成Markdown或富文本编辑器)
- 日记搜索(标题/内容关键词、日期范围)
3. 系统模块
- 操作日志记录(AOP实现)
- 异常统一处理
- 数据备份与恢复(可选)
三、技术实现细节
1. 数据库设计
- 用户表(
user
)
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL, -- BCrypt加密后长度固定60
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 日记表(
diary
)
CREATE TABLE diary (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
title VARCHAR(200) NOT NULL,
content TEXT,
category VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id)
);
2. 核心接口设计(RESTful API)
功能 | 方法 | 路径 | 说明 |
---|---|---|---|
用户注册 | POST | /api/register | 用户名密码校验 |
用户登录 | POST | /api/login | JWT令牌返回 |
创建日记 | POST | /api/diaries | 需身份验证 |
获取日记列表 | GET | /api/diaries | 分页、过滤条件 |
获取单篇日记 | GET | /api/diaries/{id} | 校验用户权限 |
更新日记 | PUT | /api/diaries/{id} | 仅允许作者操作 |
删除日记 | DELETE | /api/diaries/{id} | 软删除或物理删除 |
3. 安全控制
- Spring Security + JWT:用户登录后生成Token,后续请求通过Header携带。
- 权限校验:通过注解
@PreAuthorize
确保用户只能操作自己的日记。
@PreAuthorize("#diary.user.id == authentication.principal.id")
public void updateDiary(Diary diary) { ... }
4. 富文本编辑集成
- 方案1:使用
SimpleMDE
或TOAST UI Editor
实现Markdown编辑。 - 方案2:集成
Quill
或WangEditor
实现富文本编辑。 - 后端处理:存储HTML或Markdown原始内容,前端渲染时转换。
四、开发步骤
- 初始化项目
spring init --dependencies=web,security,mybatis,mysql diary-system
- 配置数据库连接
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/diary_db?useSSL=false
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
- 核心代码示例
// DiaryController.java
@RestController
@RequestMapping("/api/diaries")
public class DiaryController {
@Autowired
private DiaryService diaryService;
@PostMapping
public ResponseEntity<?> createDiary(@RequestBody Diary diary,
@AuthenticationPrincipal User user) {
diary.setUser(user);
diaryService.save(diary);
return ResponseEntity.ok().build();
}
}
五、扩展优化
- 文件附件:集成OSS(如阿里云OSS)存储图片/附件。
- 数据统计:通过ECharts展示日记数量趋势图。
- 多端同步:提供Android/iOS客户端(可选Flutter开发)。
- 自动化测试:使用JUnit + Mockito进行单元测试。
六、部署方案
- 本地运行:直接运行Spring Boot的
main
方法。 - 服务器部署:
- 打包为JAR:
mvn clean package
- Docker容器化(编写Dockerfile)
- Nginx反向代理配置HTTPS
通过以上方案,可快速搭建一个安全、易用的个人日记本系统。可根据需求灵活调整技术栈(如替换为Redis缓存、MongoDB存储等)。