1. 项目概述:为什么选择Spring Boot+Vue开发宿舍管理系统?
学生宿舍管理一直是高校后勤工作的痛点。传统Excel表格登记方式效率低下,纸质台账容易丢失损坏,而市面上的商业系统又往往价格昂贵、功能冗余。这套基于Spring Boot+Vue的前后端分离系统,正是为解决这些实际问题而设计的毕业课题。
我在实际开发中发现,Spring Boot 2.7.x + Vue 3的组合特别适合毕业设计场景:
- 技术栈主流且完整,涵盖企业级开发全流程
- 学习曲线平缓,社区资源丰富
- 模块化设计方便功能扩展
- 前后端分离架构符合现代开发趋势
系统核心功能包括:
- 学生信息CRUD(带分页/模糊查询)
- 宿舍分配与调换(含冲突检测)
- 访客登记与门禁记录
- 报修工单流转
- 数据可视化看板
提示:选择2.7.18版本Spring Boot而非最新的3.x系列,是因为多数高校实验室环境JDK仍停留在1.8,且ShardingSphere等中间件对3.x的支持尚不完善。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构深度解析
2.1 后端Spring Boot设计要点
采用经典三层架构:
code复制controller
├── StudentController
├── DormController
└── RepairController
service
├── impl
│ ├── StudentServiceImpl
│ └── DormServiceImpl
repository
├── mapper
│ ├── StudentMapper.xml
│ └── DormMapper.xml
关键配置示例(application.yml):
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/dorm?useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: 127.0.0.1
port: 6379
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
2.2 前端Vue 3技术选型
脚手架搭建:
bash复制npm init vue@latest dorm-frontend
核心依赖:
json复制"dependencies": {
"axios": "^1.3.4",
"echarts": "^5.4.2",
"element-plus": "^2.3.3",
"vue-router": "^4.2.0",
"pinia": "^2.0.33"
}
路由拦截示例:
javascript复制router.beforeEach((to, from, next) => {
const token = localStorage.getItem('token')
if (to.meta.requiresAuth && !token) {
next('/login')
} else {
next()
}
})
3. 核心功能实现细节
3.1 动态宿舍分配算法
核心逻辑流程图:
- 获取待分配学生列表(按专业/班级排序)
- 查询可用宿舍(剩余床位>0且同专业优先)
- 冲突检测(性别/年级限制)
- 生成分配记录
- 更新床位状态
Java实现片段:
java复制public void autoAssign(List<Student> students) {
students.sort(Comparator.comparing(Student::getMajor));
List<Dorm> availableDorms = dormMapper.selectAvailable(
students.get(0).getGender(),
students.size()
);
// 分配逻辑...
}
3.2 报修工单状态机
状态流转设计:
code复制待受理 → 已分配 → 维修中 → 已完成
↓ ↑
待评价 ←
Vue组件代码:
vue复制<template>
<el-steps :active="currentStatus">
<el-step title="待受理"></el-step>
<el-step title="已分配"></el-step>
<el-step title="维修中"></el-step>
<el-step title="已完成"></el-step>
</el-steps>
</template>
4. 典型问题排查实录
4.1 跨域问题解决方案
后端配置类:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowCredentials(true)
.maxAge(3600);
}
}
前端axios配置:
javascript复制const service = axios.create({
baseURL: 'http://localhost:8080',
timeout: 5000,
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
})
4.2 MyBatis-Plus分页失效
正确使用姿势:
java复制// Controller
@GetMapping("/students")
public Result listStudents(@RequestParam(defaultValue = "1") Integer pageNum) {
Page<Student> page = new Page<>(pageNum, 10);
return Result.success(studentService.page(page));
}
// ServiceImpl
@Override
public IPage<Student> page(Page<Student> page) {
return baseMapper.selectPage(page, null);
}
5. 答辩准备技巧
5.1 PPT制作要点
结构建议:
- 课题背景(2页)
- 技术选型对比(1页)
- 系统架构图(1页)
- 核心功能演示(3-5页)
- 难点与解决方案(2页)
- 项目总结(1页)
注意:演示环节务必准备备用方案,比如录屏或静态页面,防止现场环境问题
5.2 代码演示技巧
关键代码片段的展示原则:
- 选择有技术亮点的片段(如JWT验证、分布式锁)
- 配合UML图讲解设计思路
- 对比传统实现方案突出优化点
例如展示Redis缓存注解:
java复制@Cacheable(value = "dorm", key = "#id", unless = "#result == null")
public Dorm getById(Long id) {
return dormMapper.selectById(id);
}
6. 项目扩展方向
6.1 微服务化改造
可拆分的微服务:
- 学生服务
- 宿舍服务
- 工单服务
- 支付服务(水电费)
Nacos配置示例:
yaml复制spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
file-extension: yaml
group: DEFAULT_GROUP
6.2 移动端适配方案
基于Uniapp的跨端开发:
javascript复制// main.js
import { createSSRApp } from 'vue'
import App from './App.vue'
export function createApp() {
const app = createSSRApp(App)
return { app }
}
我在实际开发中最大的体会是:毕业设计不仅要完成基本功能,更要通过技术选型展示工程思维。例如在宿舍分配算法中,我最初使用简单轮询分配,后来改进为基于专业优先级的贪心算法,这种优化过程就是很好的答辩素材。建议学弟学妹们在开发时多写技术笔记,记录每个关键决策的思考过程,这比直接展示完美代码更有说服力。
