最后更新时间: 2026-04-25
技术栈: Spring Boot 3.3.0 + MyBatis Plus 3.5.5 + JWT + MySQL 8.x + Knife4j + JUnit5
这是一个个人学习后端的记录项目,用于记录学习过程中的时间节点、实现的功能模块以及技术积累。通过这个项目,可以清晰地追踪学习进度,并作为后续学习和回顾的参考。
| 模块 |
功能描述 |
状态 |
| 基础框架 |
Spring Boot 项目搭建 |
✅ 完成 |
| 数据库整合 |
MyBatis Plus 配置与使用 |
✅ 完成 |
| 用户认证 |
JWT 令牌生成与验证 |
✅ 完成 |
| 密码加密 |
BCrypt 密码加密存储 |
✅ 完成 |
| 登录功能 |
用户登录接口实现 |
✅ 完成 |
| 注册功能 |
用户注册接口实现 |
✅ 完成 |
| 用户管理 |
用户增删改查接口 + 分页 + 条件查询 |
✅ 完成 |
| 学生管理 |
学生信息查询接口 |
✅ 完成 |
| 统一响应 |
Result 统一返回结果封装 |
✅ 完成 |
| 全局异常处理 |
GlobalExceptionHandler 异常捕获 |
✅ 完成 |
| 拦截器 |
JwtInterceptor 请求拦截 |
✅ 完成 |
| 跨域配置 |
WebConfig 跨域支持 |
✅ 完成 |
| 接口文档 |
Knife4j API 文档自动生成 |
✅ 完成 |
| 日志切面 |
AOP 操作日志记录 |
✅ 完成 |
| 日志文件 |
Logback 日志文件输出 + 按日期分割 |
✅ 完成 |
| 前端页面 |
登录注册 + 用户管理 CRUD 界面 |
✅ 完成 |
| 单元测试 |
JUnit5 + Mockito 单元测试与集成测试 |
✅ 完成 |
| 模块 |
功能描述 |
状态 |
| 单元测试 |
JUnit5 + Mockito 单元测试与集成测试 |
✅ 完成 |
📖 详细说明
- JwtUtilTest: JWT 工具类测试(生成Token、解析Token、验证Token)
- UserServiceTest: Service 层单元测试(Mock 数据库)
- AuthControllerTest: Controller 集成测试(模拟 HTTP 请求)
| 模块 |
功能描述 |
状态 |
| 接口文档 |
Knife4j API 文档自动生成 |
✅ 完成 |
| 日志切面 |
AOP 操作日志记录 |
✅ 完成 |
| 日志文件 |
Logback 日志文件输出 + 按日期分割 |
✅ 完成 |
| 前端页面 |
登录注册 + 用户管理 CRUD 界面 |
✅ 完成 |
| 密码加密 |
BCrypt 密码加密存储 |
✅ 完成 |
📖 详细说明
- Knife4j: 访问
/doc.html 查看 API 文档,支持在线调试
- AOP 日志: 自动记录操作日志(时间、操作人、IP、模块、操作、参数、耗时)
- Logback: 日志保存到
logs/ 目录,按日期分割,单文件最大 10MB
- 前端页面: 纯 HTML/CSS/JS 实现,无需前端框架
| 模块 |
功能描述 |
状态 |
| 基础框架 |
Spring Boot 项目搭建 |
✅ 完成 |
| 数据库整合 |
MyBatis Plus 配置与使用 |
✅ 完成 |
| 用户认证 |
JWT 令牌生成与验证 |
✅ 完成 |
| 登录功能 |
用户登录接口实现 |
✅ 完成 |
| 用户管理 |
用户增删改查接口 |
✅ 完成 |
| 学生管理 |
学生信息增删改查接口 |
✅ 完成 |
| 统一响应 |
Result 统一返回结果封装 |
✅ 完成 |
| 全局异常处理 |
GlobalExceptionHandler 异常捕获 |
✅ 完成 |
| 拦截器 |
JwtInterceptor 请求拦截 |
✅ 完成 |
| 跨域配置 |
WebConfig 跨域支持 |
✅ 完成 |
src/
├── main/
│ ├── java/com/example/
│ │ ├── Application.java # 启动类
│ │ ├── controller/ # 控制器层
│ │ │ ├── AuthController.java # 认证接口(登录/注册)
│ │ │ ├── UserController.java # 用户管理接口
│ │ │ ├── StudentController.java # 学生管理接口
│ │ │ └── HelloController.java # 测试接口
│ │ ├── service/ # 服务层
│ │ │ ├── UserService.java
│ │ │ └── StudentService.java
│ │ ├── mapper/ # 数据访问层
│ │ │ ├── UserMapper.java
│ │ │ └── StudentMapper.java
│ │ ├── entity/ # 实体类
│ │ │ ├── User.java
│ │ │ └── Student.java
│ │ ├── dto/ # 数据传输对象
│ │ │ ├── LoginRequest.java
│ │ │ └── LoginResponse.java
│ │ ├── common/ # 公共组件
│ │ │ └── Result.java # 统一响应封装
│ │ ├── config/ # 配置类
│ │ │ ├── MybatisPlusConfig.java # MyBatis Plus 分页配置
│ │ │ ├── WebConfig.java # Web 配置(拦截器)
│ │ │ ├── PasswordConfig.java # BCrypt 密码加密配置
│ │ │ └── Knife4jConfig.java # API 文档配置
│ │ ├── interceptor/ # 拦截器
│ │ │ └── JwtInterceptor.java # JWT 拦截器
│ │ ├── exception/ # 异常处理
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── annotation/ # 自定义注解
│ │ │ └── Log.java # 操作日志注解
│ │ ├── aspect/ # AOP 切面
│ │ │ └── LogAspect.java # 日志切面
│ │ └── util/ # 工具类
│ │ └── JwtUtil.java # JWT 工具
│ └── resources/
│ ├── static/ # 静态资源
│ │ ├── index.html # 登录注册 + 管理页面
│ │ └── 3dgs.html # 测试页面
│ ├── application.properties # 应用配置
│ └── logback-spring.xml # 日志配置
└── test/ # 测试代码
└── java/com/example/
├── util/
│ └── JwtUtilTest.java # JWT 工具类测试
├── service/
│ └── UserServiceTest.java # Service 层测试
└── controller/
└── AuthControllerTest.java # Controller 集成测试
| 技术 |
说明 |
| Spring Boot 3.3.0 |
快速构建 RESTful API |
| MyBatis-Plus 3.5.5 |
简化数据库操作,提供 CRUD 封装 |
| JWT (jjwt 0.12.3) |
无状态认证,实现用户登录验证 |
| BCrypt |
密码加密存储,安全性保障 |
| Knife4j 4.4.0 |
API 文档自动生成,支持在线调试 |
| AOP |
操作日志切面,自动记录用户操作 |
| Logback |
日志文件输出,按日期自动分割 |
| JUnit5 |
单元测试框架 |
| Mockito |
Mock 框架,模拟依赖对象 |
- JDK 21+
- Maven 3.6+
- MySQL 8.0+
- 创建数据库:
CREATE DATABASE school_db;
- 修改
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/school_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=你的用户名
spring.datasource.password=你的密码
# 运行所有测试
mvn test
# 运行指定测试类
mvn test -Dtest=JwtUtilTest
| 方法 |
路径 |
说明 |
需要登录 |
| POST |
/auth/register |
用户注册 |
❌ |
| POST |
/auth/login |
用户登录,返回 JWT Token |
❌ |
| 方法 |
路径 |
说明 |
需要登录 |
| GET |
/user |
获取所有用户 |
✅ |
| GET |
/user/page |
分页查询用户 |
✅ |
| GET |
/user/{id} |
根据 ID 查询用户 |
✅ |
| GET |
/user/age/gt/{age} |
查询年龄大于 N 的用户 |
✅ |
| GET |
/user/age/lt/{age} |
查询年龄小于 N 的用户 |
✅ |
| GET |
/user/age/between |
查询年龄区间内的用户 |
✅ |
| POST |
/user |
新增用户 |
✅ |
| PUT |
/user |
更新用户 |
✅ |
| DELETE |
/user/{id} |
删除用户 |
✅ |
| 方法 |
路径 |
说明 |
需要登录 |
| GET |
/students |
获取所有学生 |
✅ |
| GET |
/students/{id} |
根据 ID 查询学生 |
✅ |
- 调用
/auth/login 接口登录
- 返回 JWT Token
- 后续请求在 Header 中携带 Token:
Authorization: Bearer <token>
- 默认 24 小时
- 可在
JwtUtil.java 中修改
logs/
├── mavenLearn.log # 全部日志
├── mavenLearn-error.log # 仅错误日志
└── mavenLearn.日期.序号.log # 历史日志(按日期分割)
- 单文件最大 10MB
- 保留 30 天
- 自动按日期分割
| 文件 |
类型 |
说明 |
| JwtUtilTest.java |
单元测试 |
JWT 工具类测试 |
| UserServiceTest.java |
单元测试 |
Service 层测试(Mock) |
| AuthControllerTest.java |
集成测试 |
Controller 层测试 |
- JWT Token 生成、解析、验证
- 用户 CRUD 操作
- 登录注册接口
详细的学习笔记请查看:SpringBoot 项目搭建笔记.md
本项目将持续更新,每次新增功能或学习新技术时,将在此 README 中记录时间节点和实现内容,便于追踪学习进度。
创建日期: 2026-04-18
作者: 个人学习记录