每年六月和九月,大学宿舍楼下都会准时上演两场大型物资轮回:毕业生把带不走的台灯、书桌、专业书打包贱卖,新生们则拖着行李箱满校园找二手货。以前大家怎么交易?QQ群、微信群、贴吧、宿舍楼下的黑板。我在学校待了几年,见过太多次“消息发出去没人回”“约好交易被放鸽子”“付了钱发现东西是坏的”的情况。信息零散、没有评价机制、没有交易记录、更没有平台担保,这就是校园二手市场的真实困境。
所以当我动手做这个基于Spring Boot + Vue的校园二手交易系统时,目标很明确:把线下零散的信息流变成一套结构化的交易闭环,同时配好源码、数据库和文档,让课程设计也好、实际落地也好,都有个完整可参考的样板。这篇文章不打算写教科书式的功能列表,而是把整个项目从选型、库表设计、后端接口、前端页面到部署跑通的完整思路和踩坑记录都摊开来讲,希望对正在做类似系统的人有点实际帮助。
1. 校园二手交易的真实痛点与业务闭环定义
做系统之前先别急着写代码,把业务想清楚比什么都重要。一套校园二手交易系统,表面上是“发布商品+浏览+联系”,但真正落到细节里,你会发现很多看起来简单的功能,背后都对应着校园场景特有的痛点。
1.1 微信群和贴吧解决不了的三件事
第一是信息生命周期管理。微信群里的二手信息,被聊天记录一刷就沉底了,三天后有人想买,得翻几十页记录。贴吧帖子虽然能置顶,但交易完成后帖子还在,过期信息永远躺在那里。这套系统里我设计了商品上下架和下架后的状态清理,本质上就是把“信息流”变成“资产流”,每个商品是一个有状态的实体,而不是聊天记录里的一段语音。
第二是信任与评价机制。校园二手交易最大的问题是“对面是不是靠谱的人”。微信群里交易,买卖双方对彼此几乎一无所知。系统里用注册学号/工号、发货地址、历史交易记录、评价分数构建了一个基础信任链。买之前先看对方的信用情况,这比“群友推荐”靠谱得多。
第三是交易流程的可追溯性。线下交易出了纠纷,就是各执一词。系统设计了订单状态流转和申诉入口,每一个订单处于什么状态都有记录,谁在什么时间点了确认、完成了付款/交付,后台都能查。这不是过度设计,而是真实交易中“出了问题能说清楚”的底线需求。
1.2 用户角色与完整的业务流程
这套系统的用户角色分三类:普通用户(既可以是买家也可以是卖家)、管理员、游客。游客只能浏览和搜索商品,想要发布、下单、收藏、评论就必须登录。管理员负责审核商品、处理举报和申诉、管理用户状态。
核心业务闭环是这样的:用户注册登录后发布闲置商品,填写标题、描述、价格、图片、成色、交易地点;商品经管理员审核通过后上架;买家通过分类、关键词搜索浏览商品,发起购买请求生成订单;买卖双方在线下完成交易后,在订单里确认交付;最后双方互相评价,评价数据回写到用户信用分里。整个流程用状态机控制,不允许跳步。
这个闭环最大的价值在于:每个环节都有对应的数据落库,不会出现“商品卖了但系统里还挂着”这种脱节情况。很多课程设计项目只做了发布和列表,交易环节整个缺失,那其实只能算“商品展示系统”,不能叫“交易系统”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术栈为什么锁定Spring Boot + Vue
技术选型这件事,很多新手容易陷入两个极端:一个是“用什么无所谓,老师验收能过就行”,另一个是“什么火用什么,微服务、分布式全上”。这套系统没有走这两个极端,选Spring Boot + Vue是有明确理由的。
2.1 后端选Spring Boot的三个实打实的理由
第一,开箱即用的生态。Spring Boot内置了Tomcat,内置了自动配置,一个Spring Boot应用就是一个可直接运行的jar包。相比传统的SSM(Spring + SpringMVC + MyBatis)模式,省掉了一大堆XML配置,这对一个中型管理系统来说是决定性优势。我记得最早用SSM写项目时,光spring和mybatis的配置文件就能折腾一整天,而Spring Boot里一个spring-boot-starter-web依赖就解决了绝大多数问题。
第二,和MyBatis/MyBatis-Plus配合顺畅。Spring Boot + MyBatis-Plus是国内管理系统开发最主流的组合之一。生成代码、分页插件、逻辑删除、自动填充,这些功能正好命中校园二手交易系统这种CRUD占比很高的业务场景。
第三,学习资源丰富,排坑容易。从IDEA创建Spring Boot项目、Spring Boot配置、Spring Boot整合各类中间件,网上教程一抓一大把。做课程设计或者毕业设计,遇到问题搜解决方案几乎都能搜到,这对独立开发者来说是非常现实的因素。
2.2 前端选Vue而不是jQuery/React的原因
Vue在这类项目里的优势是渐进式开发和模板语法友好。jQuery时代你得手动操作DOM,页面一复杂代码就乱成一团;Vue的数据双向绑定把“数据变化自动更新视图”这件事解决掉了,开发体验提升非常明显。相比React,Vue的学习曲线更平缓,单文件组件(SFC)的写法让一个页面组件、样式、脚本都放在一个.vue文件里,对后端出身、前端功底一般的开发者来说更容易上手。
还有就是生态匹配度。Element UI / Element Plus组件库和Vue配合起来,后台管理界面基本是“搭积木”式开发,表格、表单、弹窗、分页这些高频组件现成可用,不需要自己从头写CSS布局。这套系统里商品卡片列表、订单管理表格、后台审核界面,都是基于组件库快速搭建的。
2.3 版本选择别追新:一次springboot版本过高的教训
这点我必须重点说,因为实际踩过坑。项目最初用了当时最新的Spring Boot 3.0版本,JDK要求17,但很多人的本机环境还是JDK 8,IDE还是老版本,跑都跑不起来。后来我把项目降到Spring Boot 2.7.x + JDK 8 + MyBatis-Plus 3.5.x的组合,一切才顺了。
版本太高除了带来的环境兼容问题,还有依赖之间的冲突。比如Spring Boot 3.0对javax到jakarta包的迁移,很多老教程里的代码直接报错,排错成本很高。课程设计和毕业设计追求的不是“最新”,而是“最稳”。Sp
