基于 Spring Boot 3 + MyBatis + MySQL + Redis + JWT 的校园二手交易平台后端服务。
| 技术 |
版本 / 说明 |
| Spring Boot |
3.5.2 |
| MyBatis |
3.0.5(MyBatis-Spring-Boot-Starter) |
| Spring Security |
认证与授权框架 |
| JWT |
jjwt 0.12.6(API / HMAC-SHA256) |
| MySQL |
8+(Connector/J) |
| Redis |
7+(Lettuce 连接池) |
| Jackson |
含 jsr310 模块,统一日期格式 |
| Lombok |
简化实体类代码 |
| JUnit 5 + Mockito |
单元测试框架 |
| Maven |
构建与依赖管理 |
- JDK 17+
- Maven 3.9+
- MySQL 8.0+
- Redis 7.0+
| 模块 |
说明 |
| 用户模块 |
注册 / 登录 / JWT Token 鉴权 / 登出 |
| 商品模块 |
发布商品 / 搜索商品 / 分类筛选 / 图片上传 / Redis 缓存 |
| 订单模块 |
创建订单 / 状态流转(待付款 → 已付款 → 已完成 → 已取消) |
| 收藏模块 |
添加收藏 / 取消收藏 / 收藏列表 |
| 文件上传 |
图片上传(支持压缩)、静态资源映射 |
campus-trade
├── src/main/java/com/campus/trade
│ ├── controller/ # 控制器层(接口入口)
│ │ ├── UserController.java
│ │ ├── ProductController.java
│ │ ├── OrderController.java
│ │ ├── FavoriteController.java
│ │ └── FileUploadController.java
│ ├── service/ # 业务逻辑层
│ │ ├── UserService.java / UserServiceImpl.java
│ │ ├── ProductService.java / ProductServiceImpl.java
│ │ ├── OrderService.java / OrderServiceImpl.java
│ │ └── FavoriteService.java / FavoriteServiceImpl.java
│ ├── entity/ # 实体类(对应数据库表)
│ │ ├── User.java
│ │ ├── Product.java
│ │ ├── Order.java
│ │ └── Favorite.java
│ ├── mapper/ # MyBatis Mapper 接口
│ │ ├── UserMapper.java
│ │ ├── ProductMapper.java
│ │ ├── OrderMapper.java
│ │ └── FavoriteMapper.java
│ ├── dto/ # 数据传输对象
│ ├── config/ # Spring 配置类(Security / Redis / CORS 等)
│ ├── common/ # 通用工具(统一响应 Result 类等)
│ ├── interceptor/ # JWT 拦截器
│ └── util/ # 工具类
├── src/main/resources
│ ├── db/init.sql # 数据库初始化脚本
│ ├── mapper/ # MyBatis XML 映射文件
│ └── application.yml # 配置文件
├── src/test/java/ # 单元测试
│ ├── CampusTradeApplicationTests.java
│ ├── controller/ProductControllerTest.java
│ └── service/impl/ProductServiceImplTest.java
└── pom.xml
执行 src/main/resources/db/init.sql:
mysql -u root -p < src/main/resources/db/init.sql
脚本会自动创建 campus_trade 数据库,并建立以下表:
| 表名 |
说明 |
t_user |
用户表(BCrypt 加密存储) |
t_product |
商品表 |
t_order |
订单表 |
t_favorite |
收藏表 |
编辑 src/main/resources/application.yml,按实际环境修改数据库和 Redis 连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/campus_trade
username: root
password: 你的密码
data:
redis:
host: localhost
port: 6379
# 编译打包
mvn clean package -DskipTests
# 启动服务
java -jar target/campus-trade-0.0.1-SNAPSHOT.jar
服务默认运行在 **http://localhost:8080**。
所有接口返回统一格式 Result,包含 code、message、data 字段。
| 方法 |
路径 |
说明 |
认证 |
| POST |
/api/user/register |
用户注册 |
否 |
| POST |
/api/user/login |
用户登录,返回 JWT Token |
否 |
| GET |
/api/user/current |
获取当前登录用户信息 |
是 |
| 方法 |
路径 |
说明 |
认证 |
| GET |
/api/product/list |
商品列表(支持搜索、分类筛选、Redis 缓存) |
否 |
| GET |
/api/product/{id} |
商品详情 |
否 |
| POST |
/api/product |
发布商品 |
是 |
| PUT |
/api/product/{id} |
更新商品 |
是 |
| PUT |
/api/product/{id}/status |
上架 / 下架 |
是 |
| GET |
/api/product/my |
我的发布列表 |
是 |
| 方法 |
路径 |
说明 |
认证 |
| POST |
/api/order |
创建订单 |
是 |
| GET |
/api/order/list |
我的订单列表(含买家和卖家维度) |
是 |
| PUT |
/api/order/{id}/status |
更新订单状态 |
是 |
| 方法 |
路径 |
说明 |
认证 |
| POST |
/api/favorite |
添加收藏 |
是 |
| DELETE |
/api/favorite/{productId} |
取消收藏 |
是 |
| GET |
/api/favorite/list |
我的收藏列表 |
是 |
| 方法 |
路径 |
说明 |
认证 |
| POST |
/api/upload/image |
上传商品图片(限制 5MB) |
是 |
- Redis 缓存商品列表:热门商品列表使用 Redis 缓存,减少数据库查询压力,提升响应速度。
- 图片上传压缩:上传图片时自动压缩处理,控制文件体积,节省存储空间与带宽。
- 日志按日滚动:使用 Logback 按日滚动日志文件,方便排查问题与运维管理。
- 单元测试覆盖:Service 层和 Controller 层均有 JUnit 5 + Mockito 测试用例,保证核心逻辑质量。
- JWT Token 鉴权:无状态认证方案,Token 默认有效期 24 小时,支持过期自动拦截。