Skip to content

dxiangwiki/secondhand-trade-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

校园二手交易系统

License: MIT

基于 SpringBoot + Vue2 + ElementUI + MySQL 实现的极简版校园二手交易系统,覆盖用户注册、商品发布、订单创建三大核心功能,包含详细的实战踩坑记录与解决方案,适合前后端分离入门学习/面试项目展示。

🔥 项目亮点

  1. 全链路闭环:从前端页面交互→后端接口开发→数据库持久化,完整实现核心业务流程;
  2. 踩坑实战导向:解决开发中常见的前后端联调问题(参数传递、响应处理、数据库关键字冲突等);
  3. 规范开发:包含全局异常处理、参数校验、密码加密、.gitignore配置等企业级开发规范;
  4. 易于扩展:基础架构清晰,可快速扩展商品图片上传、订单状态管理、个人中心等功能。

🛠 技术栈

分层 技术选型 作用
后端框架 SpringBoot 2.7.x 快速搭建后端项目,简化配置
ORM框架 MyBatis-Plus 3.5.x 简化CRUD操作,减少手写SQL
前端框架 Vue2 + ElementUI 快速搭建前端页面,组件化开发
网络请求 Axios 前端与后端接口交互
数据库 MySQL 8.0 存储用户/商品/订单关联数据
其他工具 Lombok、MD5 简化实体类、密码加密

📌 核心功能

1. 用户模块

  • 🔹 用户注册:支持用户名/密码/手机号录入,密码MD5加密存储;
  • 🔹 唯一性校验:注册前校验用户名是否重复,避免数据库唯一索引冲突;
  • 🔹 参数校验:手机号格式(11位纯数字)、用户名/密码长度校验。

2. 商品模块

  • 🔹 商品发布:录入标题/价格/描述/卖家ID,发布后状态默认为「在售」;
  • 🔹 状态管理:创建订单后,商品状态自动更新为「已售出」。

3. 订单模块

  • 🔹 订单创建:关联商品ID/买家ID,自动获取商品价格、卖家ID;
  • 🔹 数据一致性:创建订单前校验商品状态,仅在售商品可创建订单。

🚀 快速启动

前置条件

  • JDK 8+
  • MySQL 8.0+
  • Node.js 14+(前端运行)

步骤1:数据库初始化

  1. 新建数据库:school_second_hand
  2. 执行仓库中 sql/secondhand.sql 脚本,自动创建user/goods/tb_order表;
  3. 修改后端 application.yml 中的数据库账号/密码(改为你的本地MySQL信息)。

步骤2:后端启动

  1. 进入后端项目根目录;
  2. 方式1:IDE中直接运行 SecondHandApplication.java
  3. 方式2:Maven打包运行:
    mvn clean package
    java -jar target/secondhand-0.0.1-SNAPSHOT.jar
  4. 后端启动成功后,接口地址:http://localhost:8080/api。

步骤3:前端启动

  1. 进入前端项目目录(如 frontend/secondhand-frontend);
  2. 安装依赖:
    npm install
  3. 启动前端:
    npm run serve
  4. 访问前端页面:http://localhost:8081。

🐞 实战踩坑记录(核心价值)

问题现象 原因分析 解决方案
接口 400 错误:参数解析失败 前端未设置 Content-Type=application/json 配置 Axios 全局请求头,后端用 @RequestBody 接收
SQL 报错:order 是关键字 订单表名使用 MySQL 关键字 表名改为 tb_order,实体类指定 @TableName
提示文案矛盾:“发布失败:发布成功” 前端响应判断逻辑错误(code=200 判为失败) 统一判断逻辑:code=200 弹成功,否则弹失败
数据库报错:phone 字段长度超限 未校验手机号长度,超出 VARCHAR (11) 限制 前端添加手机号格式正则校验
前端按钮点击无响应 ElementUI el-form 的 submit 事件失效 改用 @click 触发方法

📈 优化方向(面试加分)

基础优化(1-2 天搞定)

  • ✅ 全局异常处理:统一拦截 SQL / 参数 / 系统异常,返回友好提示;
  • ✅ JSR303 参数校验:替代手动 if 判断,注解式校验更优雅;
  • ✅ 分页功能:基于 MyBatis-Plus 实现商品列表分页。

功能扩展(3-5 天搞定)

  • 📌 商品图片上传:对接阿里云 OSS,实现图片上传 / 回显;
  • 📌 订单状态管理:支持 “待付款→已付款→已完成” 状态流转;
  • 📌 个人中心:实现 “我的发布 / 我的订单” 查询功能;
  • 📌 登录功能:扩展用户名密码登录,整合 JWT 令牌。

📝 面试高频问题 & 解答

Q1:如何保证订单创建时的数据一致性?

A:当前通过业务逻辑校验:创建订单前先查询商品状态,仅 “在售” 商品可创建;高并发场景可引入数据库乐观锁(添加 version 字段)或分布式锁,避免并发修改。

Q2:为什么选择 MyBatis-Plus 而非原生 MyBatis?

A:MyBatis-Plus 是 MyBatis 增强工具,核心优势:① 内置通用 CRUD 方法,无需手写 XML;② 条件构造器简化复杂查询;③ 内置分页插件,一行代码实现分页。

Q3:前后端联调的核心难点是什么?如何解决?

A:核心难点是参数 / 响应格式的一致性。解决方案:① 统一请求头(Content-Type=application/json);② 封装全局响应类 Result,前端按 code 统一处理;③ 前端封装 Axios 请求拦截器,后端统一异常处理。

📞 联系作者

About

基于SpringBoot+Vue的二手交易系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages