1. 项目背景与核心价值
这个基于SpringBoot+Vue的学院个人信息管理系统,是专门为高校院系设计的全栈解决方案。我在实际开发中遇到过不少学校还在用Excel表格管理学生和教师信息的情况——数据分散、版本混乱、统计困难。这套系统正是为了解决这些痛点而生。
系统采用前后端分离架构,后端用SpringBoot提供RESTful API,前端用Vue.js构建交互界面,数据库使用MySQL。这种技术组合在毕业设计中非常典型,既能展示完整的Web开发能力,又不会过于复杂导致难以完成。对于计算机相关专业的毕业生来说,这套系统涵盖了用户权限管理、数据CRUD、文件导入导出等企业级应用的核心功能模块。
2. 技术架构详解
2.1 后端技术栈选型
SpringBoot 2.7.x作为后端框架是经过深思熟虑的选择:
- 内嵌Tomcat简化部署
- 自动配置减少了XML配置
- 丰富的Starter依赖(特别是spring-boot-starter-security)
- 与MyBatis Plus的完美整合
数据库操作层采用MyBatis Plus 3.5.x,它的优势在于:
- 内置通用Mapper减少重复CRUD代码
- 强大的条件构造器
- 分页插件开箱即用
- 乐观锁支持
实际开发中发现,MyBatis Plus的Lambda表达式写法比传统XML更易维护,特别是在多表联查时。
2.2 前端技术方案
Vue 3.x + Element Plus的组合提供了:
- 响应式数据绑定
- 组件化开发体验
- 丰富的UI组件库
- Axios HTTP客户端
特别值得说明的是路由设计:
const routes = [ { path: '/student', component: Layout, children: [ { path: 'info', component: () => import('@/views/student/Info'), meta: { title: '学生信息', roles: ['admin', 'teacher'] } } ] } ]这种动态路由配合角色权限控制,实现了灵活的访问控制。
3. 核心功能实现
3.1 用户权限系统
采用RBAC(基于角色的访问控制)模型,数据库设计如下:
| 表名 | 关键字段 | 说明 |
|---|---|---|
| sys_user | username/password/role_id | 用户基础信息 |
| sys_role | name/code | 角色定义 |
| sys_menu | path/component/perms | 菜单权限 |
| sys_user_role | user_id/role_id | 用户-角色关联 |
| sys_role_menu | role_id/menu_id | 角色-菜单关联 |
权限验证通过Spring Security实现:
@PreAuthorize("hasRole('admin') or hasAuthority('student:edit')") @PostMapping("/update") public Result updateStudent(@RequestBody Student student) { return studentService.updateById(student) ? Result.success() : Result.error("更新失败"); }3.2 个人信息管理模块
学生/教师信息表设计考虑了扩展性:
CREATE TABLE `tb_student` ( `id` bigint NOT NULL AUTO_INCREMENT, `sno` varchar(20) NOT NULL COMMENT '学号', `name` varchar(50) NOT NULL, `gender` char(1) DEFAULT '男', `college` varchar(100) DEFAULT NULL COMMENT '学院', `major` varchar(100) DEFAULT NULL COMMENT '专业', `class_name` varchar(50) DEFAULT NULL COMMENT '班级', `phone` varchar(20) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `avatar` varchar(255) DEFAULT NULL COMMENT '头像URL', `status` tinyint DEFAULT '1' COMMENT '状态(1在读,2休学,3退学)', PRIMARY KEY (`id`), UNIQUE KEY `idx_sno` (`sno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;3.3 数据导入导出
使用EasyExcel处理Excel导入导出:
// 导出示例 public void export(HttpServletResponse response) { ExcelWriter writer = EasyExcel.write(response.getOutputStream(), Student.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .build(); writer.write(studentService.list(), EasyExcel.writerSheet("学生数据")) .finish(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=students.xlsx"); }4. 开发注意事项
4.1 接口规范设计
遵循统一的响应格式:
public class Result<T> { private Integer code; private String msg; private T data; public static <T> Result<T> success(T data) { return new Result<>(200, "成功", data); } }4.2 前端跨域问题
开发环境配置proxy:
devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '^/api': '' } } } }4.3 数据库连接池配置
建议的application.yml配置:
spring: datasource: url: jdbc:mysql://localhost:3306/school?useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 300005. 项目部署指南
5.1 后端打包与运行
使用SpringBoot Maven插件打包:
mvn clean package -DskipTests java -jar target/school-system-0.0.1-SNAPSHOT.jar5.2 前端生产构建
Vue项目构建命令:
npm run build生成的dist目录可直接部署到Nginx:
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html/dist; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://127.0.0.1:8080; } }6. 毕设开发建议
功能扩展方向:
- 添加学生成绩管理模块
- 实现课程表功能
- 开发移动端适配
- 增加数据可视化看板
技术深化建议:
- 集成Redis缓存热门数据
- 使用WebSocket实现通知功能
- 添加JWT无状态认证
- 引入Elasticsearch实现全文检索
文档编写要点:
- 详细记录需求分析过程
- 绘制完整的ER图
- 说明技术选型对比
- 附上完整的接口文档
这套系统在实际使用中表现稳定,我建议学弟学妹们在开发时先重点实现核心功能,再逐步扩展。数据库设计要预留足够的扩展字段,前端组件尽量复用,这样能节省大量开发时间。