毕业设计实战:基于Spring Boot+MySQL的校园交友网站设计与实现全流程指南

45 阅读12分钟

毕业设计实战:基于Spring Boot+MySQL的校园交友网站设计与实现全流程指南

在完成“校园交友网站”毕业设计的过程中,用户信息审核机制曾是核心难点之一——因未在“交友信息表”与“用户表”间建立完善的审核流程,导致未认证用户发布虚假信息,耗费1天时间重构审核逻辑才解决问题🤝。基于此次实战经验,本文将系统拆解从需求分析、技术选型、功能实现到测试验收的全流程关键要点,梳理常见问题及解决方案,为筹备社交类毕设的同学提供可落地的实施指南。

一、需求分析:精准定位校园社交核心,避免功能泛化

部分同学在毕设初期易陷入“大而全”误区,试图复制成熟社交平台所有功能。笔者曾耗费一周开发“实时聊天系统”,最终因偏离“线下活动组织、交友信息展示、论坛交流”核心需求被导师要求简化。可见,明确“校园场景-用户痛点”对应关系,是控制开发范围的关键前提。

1. 核心用户与功能拆解(优化后权限体系)

系统核心用户分为管理员、普通用户两类,前期曾因审核权限模糊,导致用户可随意修改他人活动报名状态,明确审核边界后系统秩序显著提升。具体分工如下:

管理员端(核心必做功能)
  • 用户管理:用户账号审核与维护(支持按姓名/性别/年龄筛选),查看完整资料(头像、联系方式、个人简介),处理异常账号(冻结恶意用户);
  • 内容管理:线下活动发布与审核(校验活动信息真实性、时间地点合理性),交友信息审核(验证资料真实性、图片合规性),论坛帖子管理(删除违规内容、置顶优质帖子);
  • 互动管理:活动报名审核(查看报名用户资质、批量通过/驳回),系统公告发布(编辑校园通知、交友规则),首页轮播图维护;
  • 数据统计:用户活跃度分析(按日/周统计注册量),活动参与度统计,交友信息点击量排行,数据报表导出(支持Excel格式的运营数据)。
用户端(核心需求功能)
  • 交友信息管理:完善个人交友资料(上传真实照片、填写兴趣爱好、交友目的),浏览其他用户信息(按性别/年龄/兴趣筛选),点赞/踩互动;
  • 活动参与:查看最新线下活动(校园聚会、兴趣小组、学习沙龙),在线报名参与,查看已报名活动状态;
  • 论坛交流:在交流论坛发帖/回帖(分享校园生活、求助咨询),查看系统公告,收藏感兴趣的活动或用户;
  • 个人中心:修改个人信息(密码、联系方式、头像),管理个人发布内容(编辑/删除交友信息、论坛帖子),查看我的收藏。

2. 需求分析避坑要点(实战经验总结)

  • 聚焦校园场景:邀请5-8名在校学生进行需求访谈,收集真实交友痛点。例如,基于用户“快速找到同城校友”需求,增设“同校筛选”功能(基于学校字段过滤),实用性远高于复杂的智能匹配算法;
  • 绘制用户旅程图:使用DrawIO绘制“注册→完善资料→浏览活动→报名参与→线下见面”完整流程,汇报时直观呈现用户体验路径;
  • 定义数据验证规则:明确关键约束条件,如“用户年龄范围18-35岁”“活动报名截止时间≥当前时间”“交友图片大小≤3MB”“个人简介字数≥50字”,为后续开发提供明确依据。

3. 可行性分析:三维度论证,提升专业性

  • 技术可行性:Spring Boot、Java、MySQL技术栈成熟稳定,校园实验室普遍支持;需注意避免使用最新Spring Boot 3.x版本,笔者前期遭遇与JSP整合问题,回退至2.7稳定版后顺利运行;
  • 经济可行性:开发工具全免费(Eclipse、MySQL社区版、Tomcat),部署成本仅需域名+基础服务器(学生优惠约200元/年),投入产出比高;
  • 操作可行性:界面设计参考主流校园APP(如“超级课程表”“校园菌”),将高频功能(“找活动”“看动态”)置于导航栏首位,经测试,新用户8分钟内可完成注册→完善资料→浏览活动全流程。

二、技术选型:稳定第一,避免兼容性问题

前期曾尝试Spring Boot 3.x + Vue 3前后端分离架构,因跨域配置复杂导致活动报名接口调试耗时2天。后续调整为“Java 8 + Spring Boot 2.7 + MySQL 8.0 + JSP + Bootstrap 3”单体架构,技术栈成熟、学习成本低,适合3-4周快速开发。

1. 核心技术栈选型说明

技术工具选型理由避坑提醒
Java 8语法稳定,校园教学主流版本,调试工具丰富(IDEA/Eclipse)避免使用Java 11+的模块化特性,依赖配置复杂,易出现ClassNotFound异常
Spring Boot 2.7简化配置,自带Tomcat,快速搭建RESTful接口,适合交友信息的增删改查使用spring-boot-starter-web、spring-boot-starter-data-jpa,避免手动配置事务管理器
MySQL 8.0支持JSON字段(存储兴趣爱好数组),性能优化好,utf8mb4支持Emoji表情安装时必须设置默认字符集utf8mb4,否则存储Emoji会出现乱码“???”
JSP + JSTL与Spring MVC无缝整合,可直接在页面中遍历用户列表、活动列表避免在JSP中编写复杂Java代码,业务逻辑应放在Controller层
Bootstrap 3提供响应式网格系统,快速搭建美观的卡片式交友信息展示页使用3.4.1稳定版,5.x版本部分CSS类名变更,需重写大量样式

2. 开发环境搭建步骤(一次成功指南)

  1. 安装JDK 1.8:配置JAVA_HOME,cmd验证java -version显示1.8.x;
  2. 安装Eclipse 2022:安装Spring Tools 4插件,工作空间编码设为UTF-8;
  3. 安装MySQL 8.0:使用Navicat创建数据库campus_dating_system,字符集utf8mb4;
  4. 创建Spring Boot项目
<!-- pom.xml关键依赖 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
</dependencies>
  1. 配置application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/campus_dating_system?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true
server:
  port: 8080
  servlet:
    context-path: /campus

三、数据库设计:理清社交关系,避免数据混乱

数据库是社交系统的核心,前期因“活动报名表”未关联“用户表”外键,导致删除用户后报名记录成为孤儿数据。采用“用户-内容-互动”三层模型后,数据一致性显著提升。

1. 核心表结构设计(共12张核心表)

  • 用户表(user):id、username、password、name、gender、age、phone、avatar、create_time
  • 交友信息表(dating_info):id、user_id(外键)、hobbies(JSON格式)、purpose、intro、photos、status(0待审核/1已审核/2驳回)、audit_remark、like_count、view_count
  • 线下活动表(offline_activity):id、title、type、location、time、content、images、organizer_id(外键)、status、create_time
  • 活动报名表(activity_registration):id、activity_id(外键)、user_id(外键)、apply_time、status(0待审核/1通过/2驳回)、remark
  • 交流论坛表(forum):id、title、content、user_id、parent_id(支持回复)、like_count、create_time
  • 收藏表(favorite):id、user_id、target_id、target_type(1活动/2用户/3帖子)、create_time
  • 系统公告表(notice):id、title、content、type、images、publish_time

关键避坑提醒:兴趣爱好字段不要用逗号分隔!初期使用“音乐,电影,读书”字符串存储,查询时需LIKE模糊匹配,性能极差。后续改为JSON数组格式["音乐","电影","读书"],可使用JSON_CONTAINS函数高效查询。

2. 表关联测试(提前验证核心查询)

-- 测试:查询“音乐兴趣小组”活动的所有报名用户,并显示用户基本信息
SELECT u.name, u.gender, u.age, u.avatar, r.apply_time, r.status
FROM activity_registration r
JOIN user u ON r.user_id = u.id
JOIN offline_activity a ON r.activity_id = a.id
WHERE a.title = '音乐兴趣小组' AND a.status = 1
ORDER BY r.apply_time DESC;

若能正常返回用户姓名、性别、年龄、头像、报名时间、审核状态,说明关联正确;若出现“Cannot add or update a child row”错误,检查外键字段类型是否一致(如user_id在两张表中都应为bigint)。

四、功能实现:聚焦三个核心模块,突出社交特色

1. 用户端:交友信息管理模块(核心必做)

业务逻辑

  1. 信息完善:用户填写真实资料(必填:姓名、性别、年龄、兴趣爱好、交友目的、个人简介),上传3-5张真实照片(支持JPG/PNG,≤3MB);
  2. 审核机制:提交后进入“待审核”状态,管理员24小时内审核(验证资料真实性、照片合规性),通过后对外可见;
  3. 浏览互动:用户可按条件筛选(性别、年龄范围、兴趣标签),查看他人资料,支持点赞/踩、收藏操作。

页面设计

  • 资料编辑页:表单分栏布局(基本信息、兴趣选择器、照片上传区、提交按钮)
  • 浏览列表页:卡片式布局(头像+姓名+年龄+3个兴趣标签+“查看详情”按钮),顶部筛选栏
  • 详情页:大图轮播+详细信息+互动按钮(点赞/收藏/举报)

技术要点:使用MySQL JSON字段存储兴趣爱好,查询时:

// Spring Data JPA查询拥有“音乐”兴趣的用户
@Query(value = "SELECT * FROM dating_info WHERE JSON_CONTAINS(hobbies, '\"音乐\"')", nativeQuery = true)
List<DatingInfo> findByHobby(String hobby);

2. 用户端:线下活动参与模块(答辩亮点)

业务逻辑

  1. 活动浏览:按时间倒序展示最新活动,支持按类型(学习/娱乐/运动)、地点筛选,显示已报名人数;
  2. 在线报名:点击“立即报名”填写简单备注,提交后进入“待审核”状态(防止恶意刷单);
  3. 状态跟踪:在“我的报名”中查看审核进度(待审核/已通过/已驳回),管理员审核通过后显示具体活动信息(时间、地点、联系人)。

避坑提醒:活动时间冲突检测!初期未检测用户时间冲突,导致同一用户报名多个时间重叠活动。后续增加校验:

public boolean checkTimeConflict(Long userId, LocalDateTime newActivityTime) {
    List<ActivityRegistration> myActivities = registrationRepo.findByUserIdAndStatus(userId, 1);
    return myActivities.stream().anyMatch(reg -> {
        LocalDateTime activityTime = reg.getActivity().getTime();
        return activityTime.toLocalDate().isEqual(newActivityTime.toLocalDate())
                && Math.abs(activityTime.getHour() - newActivityTime.getHour()) < 3;
    });
}

3. 管理员端:内容审核模块(体现管理能力)

业务逻辑

  1. 批量审核:列表页显示待审核内容(交友信息、活动报名),支持多选后批量通过/驳回;
  2. 审核日志:记录每次审核操作(管理员、审核时间、审核结果、备注),便于追溯;
  3. 数据看板:统计每日新增用户数、审核通过率、活动参与率,使用ECharts生成柱状图/饼图。

页面设计

  • 审核列表页:Tab切换(交友审核/活动审核/论坛审核),表格带预览缩略图
  • 审核详情页:左侧申请内容,右侧审核操作区(通过/驳回单选+备注框)
  • 数据看板页:顶部时间选择器,中间图表区,底部数据汇总卡片 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试验收:全面覆盖社交场景,确保稳定运行

1. 功能测试用例(重点场景)

测试场景操作步骤预期结果
用户上传虚假照片用户上传网图作为头像→提交交友信息→管理员审核管理员识别为网图,选择“驳回”并备注“请上传真实本人照片”
同一用户重复报名用户报名“周末篮球赛”→审核通过→再次报名同一活动系统提示“您已成功报名该活动,无需重复报名”
敏感词检测用户在论坛发布含敏感词帖子→点击提交系统提示“内容包含敏感词汇,请修改后重新提交”

2. 性能测试要点

  • 并发测试:使用JMeter模拟50用户同时浏览交友列表,响应时间应<2秒;
  • 图片加载优化:交友列表页使用缩略图(150×150px),详情页才加载原图,减少带宽消耗;
  • 数据库索引优化:为user表的username、dating_info表的status、activity_registration表的user_id建立索引。

3. 测试报告撰写规范

  • 发现问题:记录如“活动时间冲突检测未实现,已添加时间重叠校验”“敏感词库仅50条,扩充至500条”;
  • 测试结论:“系统核心功能完整,交友信息审核、活动报名、论坛交流流程顺畅,满足校园社交基本需求,可进行答辩演示”。

六、答辩准备:三个技巧提升通过率

  1. 演示剧本设计

    • 第一幕:用户注册→完善交友资料(展示照片上传、兴趣选择)
    • 第二幕:浏览线下活动→报名参与→查看审核状态
    • 第三幕:管理员审核用户资料→批量通过→查看数据统计 (每个操作停留3秒,关键步骤口头说明)
  2. 突出安全设计

    • 隐私保护:用户手机号、微信号等敏感信息脱敏显示
    • 审核机制:所有UGC内容(资料、帖子)先审后发
    • 举报功能:用户可举报虚假信息,管理员快速处理
  3. 预设问答准备

    • Q:如何保证用户资料真实性? A:三重验证:① 照片人工审核;② 学生证验证(可选);③ 校友互证机制
    • Q:系统有何创新点? A:聚焦校园垂直场景,通过“线下活动”促进行真实社交,而非纯线上匹配

结语

本文基于Spring Boot+MySQL的校园交友网站毕业设计实战,系统梳理了从需求分析到答辩的全流程要点。社交类毕设核心在于“真实、安全、互动”,无需追求复杂算法(如AI匹配),将资料审核、活动组织、论坛交流等基础功能做扎实,即可满足答辩要求。

若需要完整源码(含详细注释)、数据库脚本(带测试数据)、界面模板,可在评论区留言“校园交友系统”获取;如在审核流程、活动报名等模块遇到具体问题,也可留言交流。

收藏本文,开发过程中随时查阅~ 祝各位同学毕设顺利,交友功能也能帮到自己!🎓❤️