毕业设计实战:基于Spring Boot的在线家具商城全栈开发解析

41 阅读12分钟

一、项目背景:家具电商数字化管理的必然趋势

在消费升级与电商深度融合的当下,传统家具销售与管理模式正面临三大核心痛点信息处理低效(人工记录商品库存、订单数据易出错,修改与检索耗时)、管理流程分散(商品上架、用户管理、订单跟踪缺乏统一平台)、用户体验割裂(消费者无法便捷查询商品详情、提交评价反馈)。据行业调研显示,2023年国内中小家具商家中,仍有55%依赖Excel或纸质文档管理业务,数字化水平严重制约运营效率与用户满意度。

为破解这一困境,基于Spring Boot的在线家具商城应运而生。系统以“商品管理规范化、订单流程自动化、用户服务一体化”为核心目标,采用B/S架构构建适配家具销售场景的全流程管理平台,整合用户管理、商品分类、订单处理、评价互动等功能模块,建立“管理员统筹-用户自主操作”的双向应用模式,推动家具销售从“人工分散管理”向“数字化、系统化、高效化”转型。

二、技术架构:在线家具商城的全栈技术选型

项目围绕“稳定性、可扩展性、易用性”三大原则,选用成熟的Java技术栈,确保系统在商品管理、订单流转等核心业务场景下高效运转:

技术模块具体工具/技术核心作用
后端框架Spring Boot 2.x简化配置,快速构建RESTful API,支持事务管理与依赖注入,提升开发效率
数据库MySQL 8.0安全存储商品信息、用户数据、订单记录等核心业务数据,支持高效关联查询
前端技术Vue + Bootstrap + JavaScript构建响应式界面,实现商品预览、购物车交互、订单提交等动态功能
架构模式B/S(Browser/Server)无需安装客户端,通过浏览器即可访问,降低用户使用门槛
开发工具Eclipse提供代码提示、调试功能,集成数据库访问插件,简化开发流程
服务器Tomcat 9.0部署Web应用,保障商城日常运营中的稳定运行,支持多用户并发访问

三、项目全流程:6步完成在线家具商城开发

3.1 第一步:需求分析——明确核心功能与角色边界

针对传统家具管理的“效率低、流程散、体验差”痛点,系统聚焦“全流程线上化”,明确两大核心角色的需求体系:

3.1.1 角色与核心功能

角色核心功能
管理员个人中心管理、用户信息维护(新增/修改/删除)、商品分类管理(添加/编辑/作废)、商品信息管理(查询/新增/修改/下架)、商品评论审核、新闻资讯发布、订单状态监控
普通用户账号注册/登录、商品浏览与搜索(按名称/类型筛选)、购物车管理、订单提交与查询、商品评价、个人信息修改、新闻查看

3.1.2 非功能性需求

  • 系统专业性:适配家具商品特性,支持多分类(如沙发、床具、桌椅)、多参数(尺寸、材质、风格)的精细化管理;
  • 数据准确性:商品库存、订单状态、用户评价等数据实时同步,无偏差;
  • 安全性要求:用户密码加密存储(采用MD5算法),管理员与用户权限严格隔离,防止越权操作;
  • 易用性:界面布局符合电商使用习惯,关键操作(如下单、查订单)路径不超过3步,降低学习成本。

3.2 第二步:系统设计——构建架构与数据库

3.2.1 系统总体架构

采用分层设计,职责清晰,便于维护与扩展:

  1. 表现层:通过Vue + Bootstrap实现前端界面,区分“用户前台”与“管理员后台”,支持响应式布局,适配电脑、平板等终端;
  2. 业务逻辑层:基于Spring Boot实现核心服务,如用户认证、商品管理、订单流转、评价审核,确保业务逻辑与数据操作解耦;
  3. 数据持久层:通过MyBatis实现数据库交互,支持复杂查询(如按商品类型筛选订单)与事务控制(如订单提交后自动扣减库存)。

3.2.2 核心数据库设计

系统设计9张核心数据表,覆盖“用户-商品-订单-评价”全链路,关键表结构如下:

表名核心字段作用
用户表(yonghu)id、yonghu_name(姓名)、yonghu_phone(手机号)、password(加密密码)、new_money(余额)存储用户基本信息与登录凭证
商品信息表(goods)id、goods_name(商品名)、goods_types(类型)、goods_photo(图片)、goods_kucun_number(库存)、goods_old_money(原价)、goods_new_money(现价)记录家具商品详细信息,支撑前端展示与库存管理
商品订单表(goods_order)id、goods_order_uuid_number(订单号)、goods_id(商品ID)、yonghu_id(用户ID)、buy_number(购买数量)、goods_order_true_price(实付价格)、goods_order_types(订单状态)追踪订单从“待付款”到“已完成”的全状态流转
商品评价表(goods_comment)id、goods_id(商品ID)、yonghu_id(用户ID)、goods_commentback_text(评价内容)、reply_text(管理员回复)、insert_time(评价时间)存储用户对商品的评价,支持管理员回复与审核
新闻信息表(news)id、news_name(标题)、news_photo(图片)、news_types(类型)、news_content(详情)、insert_time(发布时间)发布家具行业资讯、促销活动通知,提升用户粘性

3.3 第三步:后端核心功能实现——Spring Boot落地

以“商品管理”“订单处理”“评价审核”三大高频场景为例,展示后端代码实现:

3.3.1 商品信息管理(管理员功能)

@RestController
@RequestMapping("/api/admin/goods")
public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    /**
     * 管理员新增家具商品
     */
    @PostMapping("/add")
    public ResponseEntity<?> addGoods(@RequestBody GoodsDTO goodsDTO) {
        try {
            // 1. 参数验证:商品名、类型、库存、价格为必填项
            if (StringUtils.isEmpty(goodsDTO.getGoodsName()) 
                || goodsDTO.getGoodsTypes() == null 
                || goodsDTO.getGoodsKucunNumber() == null 
                || goodsDTO.getGoodsNewMoney() == null) {
                return ResponseEntity.badRequest().body("商品名、类型、库存、现价不能为空");
            }

            // 2. 构建商品实体
            Goods goods = new Goods();
            goods.setGoodsName(goodsDTO.getGoodsName());
            goods.setGoodsTypes(goodsDTO.getGoodsTypes()); // 关联商品分类(如1-沙发、2-床具)
            goods.setGoodsPhoto(goodsDTO.getGoodsPhoto()); // 商品图片URL
            goods.setGoodsKucunNumber(goodsDTO.getGoodsKucunNumber()); // 库存数量
            goods.setGoodsOldMoney(goodsDTO.getGoodsOldMoney()); // 原价
            goods.setGoodsNewMoney(goodsDTO.getGoodsNewMoney()); // 现价
            goods.setShangxiaTypes(1); // 1-上架,0-下架
            goods.setGoodsContent(goodsDTO.getGoodsContent()); // 商品详情(材质、尺寸等)
            goods.setCreateTime(new Date());

            // 3. 保存商品信息
            Goods result = goodsService.saveGoods(goods);
            return ResponseEntity.ok("商品新增成功,商品ID:" + result.getId());
        } catch (Exception e) {
            return ResponseEntity.internalServerError().body("新增商品失败:" + e.getMessage());
        }
    }

    /**
     * 管理员修改商品库存
     */
    @PostMapping("/updateStock")
    public ResponseEntity<?> updateStock(@RequestParam Long goodsId,
                                        @RequestParam Integer newStock) {
        try {
            // 1. 查找商品
            Goods goods = goodsService.getById(goodsId);
            if (goods == null) {
                return ResponseEntity.badRequest().body("商品不存在");
            }

            // 2. 验证库存合法性(不能为负数)
            if (newStock < 0) {
                return ResponseEntity.badRequest().body("库存不能为负数");
            }

            // 3. 更新库存
            goods.setGoodsKucunNumber(newStock);
            goodsService.updateGoods(goods);

            return ResponseEntity.ok("库存更新成功,当前库存:" + newStock);
        } catch (Exception e) {
            return ResponseEntity.internalServerError().body("更新库存失败:" + e.getMessage());
        }
    }
}

3.3.2 订单处理(用户-系统协同)

@RestController
@RequestMapping("/api/order")
public class OrderController {

    @Autowired
    private GoodsOrderService orderService;

    @Autowired
    private GoodsService goodsService;

    /**
     * 用户提交家具订单
     */
    @PostMapping("/create")
    public ResponseEntity<?> createOrder(@RequestBody OrderDTO orderDTO,
                                        @RequestHeader("yonghuId") Long yonghuId) {
        // 开启事务,确保订单创建与库存扣减原子性
        try {
            // 1. 验证商品是否存在且上架
            Goods goods = goodsService.getById(orderDTO.getGoodsId());
            if (goods == null || goods.getShangxiaTypes() == 0) {
                return ResponseEntity.badRequest().body("商品不存在或已下架");
            }

            // 2. 验证库存是否充足
            if (goods.getGoodsKucunNumber() < orderDTO.getBuyNumber()) {
                return ResponseEntity.badRequest().body("库存不足,当前库存:" + goods.getGoodsKucunNumber());
            }

            // 3. 构建订单实体
            GoodsOrder order = new GoodsOrder();
            order.setGoodsOrderUuidNumber(UUID.randomUUID().toString().replace("-", "")); // 生成唯一订单号
            order.setGoodsId(goods.getId());
            order.setYonghuId(yonghuId);
            order.setBuyNumber(orderDTO.getBuyNumber());
            // 计算实付价格(现价 × 购买数量)
            BigDecimal totalPrice = goods.getGoodsNewMoney()
                .multiply(new BigDecimal(orderDTO.getBuyNumber()));
            order.setGoodsOrderTruePrice(totalPrice);
            order.setGoodsOrderTypes(0); // 0-待付款,1-待发货,2-待收货,3-已完成
            order.setGoodsOrderPaymentTypes(orderDTO.getPaymentType()); // 支付方式(如1-微信、2-支付宝)
            order.setInsertTime(new Date());

            // 4. 保存订单 + 扣减库存
            orderService.saveOrderAndReduceStock(order, goods);

            return ResponseEntity.ok("订单创建成功,订单号:" + order.getGoodsOrderUuidNumber());
        } catch (Exception e) {
            return ResponseEntity.internalServerError().body("订单创建失败:" + e.getMessage());
        }
    }
}

3.3.3 商品评价审核(管理员功能)

@RestController
@RequestMapping("/api/admin/comment")
public class AdminCommentController {

    @Autowired
    private GoodsCommentService commentService;

    /**
     * 管理员审核用户评价
     */
    @PostMapping("/audit")
    public ResponseEntity<?> auditComment(@RequestParam Long commentId,
                                         @RequestParam Integer auditResult, // 1-通过,0-拒绝
                                         @RequestParam(required = false) String replyText) {
        try {
            // 1. 查找评价记录
            GoodsComment comment = commentService.getById(commentId);
            if (comment == null) {
                return ResponseEntity.badRequest().body("评价记录不存在");
            }

            // 2. 更新审核状态与回复
            comment.setSfsh(auditResult == 1 ? "是" : "否"); // 是否审核通过
            comment.setReplyText(replyText); // 管理员回复(拒绝时填写原因)
            comment.setUpdateTime(new Date());
            commentService.updateComment(comment);

            return ResponseEntity.ok(auditResult == 1 ? "评价审核通过" : "评价审核拒绝");
        } catch (Exception e) {
            return ResponseEntity.internalServerError().body("审核失败:" + e.getMessage());
        }
    }
}

3.4 第四步:前端界面实现——电商化交互设计

基于Vue + Bootstrap构建“前后台分离”界面,确保不同角色操作便捷、视觉统一:

3.4.1 核心界面设计

  1. 管理员后台

    • 商品管理页:表格展示商品信息(含名称、类型、库存、图片预览),操作列提供“编辑”“下架”“查看评论”按钮,支持按商品名模糊搜索;
    • 订单管理页:按状态筛选订单(待付款/待发货/已完成),显示订单号、用户信息、实付金额,操作列提供“更新状态”“查看详情”功能;
    • 评论审核页:列表展示待审核评价(含商品名、用户名、评价内容),操作列提供“通过”“拒绝”按钮,支持快速回复。
  2. 用户前台

    • 首页:轮播图展示热门家具、分类导航(沙发、床具、桌椅)、新品推荐区;
    • 商品列表页:按分类筛选商品,支持按价格排序,商品卡片显示名称、现价、缩略图、库存状态;
    • 商品详情页:多图预览商品、详细参数(尺寸、材质、风格)、用户评价(审核通过后展示),附带“加入购物车”“立即购买”按钮;
    • 个人中心:用户信息修改、订单查询(按状态筛选)、评价管理入口。

3.4.2 设计亮点

  • 家具行业适配:商品详情页突出“尺寸参数”“材质说明”模块,解决家具购买中“参数不清晰”的痛点;
  • 操作便捷性:关键功能按钮位置统一(如“新增商品”固定在页面右上角),减少用户操作路径;
  • 视觉体验:采用暖色调(米色、浅木色)为主色,贴合家具温馨属性,商品图片采用高清大图,提升视觉吸引力;
  • 响应式适配:在电脑、平板等设备上自动调整界面布局(如手机端商品列表单列展示,电脑端双列展示)。

3.5 第五步:系统测试——验证功能与性能达标

通过多维度测试,验证系统功能完整性、数据准确性与运行稳定性,确保满足家具商城的实际使用需求:

3.5.1 功能测试

测试场景测试用例预期结果实际结果
管理员新增商品填写完整信息(名称“现代沙发”、类型“沙发”、库存10、现价2999元)商品新增成功,列表中显示该商品符合预期
用户下单选择“现代沙发”,购买1件,提交订单订单创建成功,库存扣减为9符合预期
评价审核管理员通过一条用户评价,填写回复“感谢您的认可”评价状态更新为“已通过”,前台显示回复符合预期
商品搜索用户搜索“床”显示所有床具类商品(如实木床、软包床)符合预期

3.5.2 性能测试

  • 并发测试:模拟100名用户同时访问商品列表页,系统响应时间<2秒,无页面卡顿;
  • 数据准确性测试:连续新增50条商品数据、100条订单记录,查询时无数据丢失或重复;
  • 稳定性测试:系统连续运行72小时,期间进行商品管理、订单操作等常规业务,无崩溃或内存泄漏。

3.6 第六步:问题排查与优化

开发过程中针对核心问题制定解决方案,持续提升系统体验:

  1. 问题1:商品图片加载慢
    原因:原图体积大(单张图5MB+),未做压缩处理。
    解决方案:前端使用图片懒加载,后端对上传图片进行压缩(限制分辨率为1920×1080,大小<500KB),加载速度提升60%。

  2. 问题2:用户下单时库存超卖
    原因:高并发下未加锁,多个用户同时下单导致库存扣减异常。
    解决方案:使用Spring事务 + 数据库行锁(SELECT ... FOR UPDATE),确保库存扣减原子性,避免超卖。

  3. 问题3:商品搜索效率低
    原因:未添加索引,数据量达1000+时查询耗时超3秒。
    解决方案:在商品表的“goods_name”“goods_types”字段添加索引,查询速度提升至0.5秒内。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

四、项目复盘:经验总结与扩展方向

4.1 开发收获与挑战

  • 核心挑战:家具商品参数复杂(需支持多维度筛选)、订单状态流转逻辑(需覆盖用户取消、超时未付款等异常场景)、前后端参数对齐(如商品类型编码映射);
  • 关键经验:数据库设计阶段需提前规划表关联(如订单表关联商品ID与用户ID),功能开发前先编写测试用例(减少返工),注重用户体验细节(如商品参数可视化)。

4.2 系统扩展方向

  1. 支付功能集成:对接支付宝、微信支付接口,实现“下单-支付”闭环,替代当前“线下转账”的临时方案;
  2. 会员积分体系:用户购买商品获得积分,积分可抵扣现金或兑换优惠券,提升用户粘性;
  3. 智能推荐:基于用户浏览、购买记录,推荐相似风格或互补家具(如买沙发后推荐茶几);
  4. AR预览功能:开发AR模块,用户可通过手机摄像头查看家具在自家空间的摆放效果,降低决策成本;
  5. 供应链管理:新增供应商管理模块,支持管理员对接货源、跟踪采购进度,实现“库存预警-自动采购”联动。

五、项目资源

本项目提供完整开发资料,可直接用于毕业设计或实际家具商家落地:

  • 源码:后端Spring Boot工程、前端Vue页面;
  • 数据库:MySQL建表语句、初始测试数据(含示例商品、用户账号);
  • 文档:需求分析报告、数据库设计文档、部署教程(含环境配置步骤)、用户操作手册;
  • 设计图:系统架构图、E-R图、界面原型图。

如果本文对您的Spring Boot学习、电商类毕业设计或家具行业系统开发有帮助,欢迎点赞+收藏+关注,后续会分享更多实战细节与问题解决方案!