这个基于SpringBoot+Vue的大学生班级管理系统,是一个典型的全栈开发项目,特别适合计算机相关专业学生用于毕业设计、课程设计或自学实践。系统采用前后端分离架构,后端使用SpringBoot框架,前端采用Vue.js,数据库选用MySQL,涵盖了用户管理、班级管理、课程管理、成绩管理等核心功能模块。
我在实际开发教育类管理系统时发现,这类项目最能锻炼学生的全栈开发能力。它不仅包含了基础的CRUD操作,还涉及权限控制、数据统计、文件导入导出等实用功能,完全符合高校对毕业设计的复杂度要求。
SpringBoot 2.7.x作为后端框架,这是目前企业级Java开发的主流选择。相比传统的SSM框架,SpringBoot的自动配置特性让开发更高效。我在项目中特别配置了:
java复制// 示例:SpringBoot主启动类
@SpringBootApplication
@MapperScan("com.classmanager.mapper")
public class ClassManagerApplication {
public static void main(String[] args) {
SpringApplication.run(ClassManagerApplication.class, args);
}
}
数据库访问层使用MyBatis-Plus 3.5.x,它的代码生成器和Wrapper查询能大幅减少SQL编写量。对于学生项目,我建议采用这样的配置:
yaml复制# application.yml片段
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Vue 3.x + Element Plus的组合,提供了良好的开发体验和美观的UI。项目采用axios处理HTTP请求,配置了全局拦截器:
javascript复制// src/utils/request.js
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 5000
})
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['Authorization'] = 'Bearer ' + getToken()
}
return config
},
error => {
return Promise.reject(error)
}
)
采用RBAC(基于角色的访问控制)模型,设计了三类角色:管理员、教师、学生。数据库表关系如下:
sql复制CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`real_name` varchar(50) DEFAULT NULL,
`role_id` int DEFAULT NULL COMMENT '角色ID',
PRIMARY KEY (`user_id`),
UNIQUE KEY `username` (`username`)
);
CREATE TABLE `sys_role` (
`role_id` int NOT NULL AUTO_INCREMENT,
`role_name` varchar(30) NOT NULL,
`role_key` varchar(100) NOT NULL,
PRIMARY KEY (`role_id`)
);
后端使用Spring Security实现权限控制,核心配置类:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/teacher/**").hasAnyRole("TEACHER","ADMIN")
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()));
}
}
实现班级信息的增删改查和分页查询,后端Controller示例:
java复制@RestController
@RequestMapping("/class")
public class ClassController {
@Autowired
private ClassService classService;
@GetMapping("/list")
public TableDataInfo list(ClassEntity classEntity, PageDomain page) {
PageHelper.startPage(page.getPageNum(), page.getPageSize());
List<ClassEntity> list = classService.selectClassList(classEntity);
return getDataTable(list);
}
}
前端使用Element Plus的Table组件展示数据:
vue复制<template>
<el-table :data="classList" style="width: 100%">
<el-table-column prop="className" label="班级名称" />
<el-table-column prop="grade" label="年级" />
<el-table-column prop="major" label="专业" />
<el-table-column label="操作">
<template #default="scope">
<el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
</template>
系统包含以下核心表:
成绩表的设计需要关联学生和课程:
sql复制CREATE TABLE `score_info` (
`score_id` bigint NOT NULL AUTO_INCREMENT,
`student_id` bigint NOT NULL COMMENT '学生ID',
`course_id` bigint NOT NULL COMMENT '课程ID',
`score` decimal(5,2) DEFAULT NULL COMMENT '分数',
`term` varchar(20) DEFAULT NULL COMMENT '学期',
PRIMARY KEY (`score_id`),
UNIQUE KEY `uniq_stu_course` (`student_id`,`course_id`,`term`)
);
注意:成绩表设置了(student_id, course_id, term)的联合唯一约束,防止同一学生同一课程在同一学期重复录入成绩。
bash复制mvn clean package
bash复制java -jar class-manager.jar
bash复制npm install
bash复制npm run build
开发环境下,可以在后端添加CORS配置:
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);
}
}
推荐使用Swagger生成API文档,添加依赖:
xml复制<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
配置类:
java复制@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.classmanager.controller"))
.paths(PathSelectors.any())
.build();
}
}
在实际教学中,我发现学生最容易卡在权限控制和前后端数据交互这两个环节。建议在开发时先设计好API文档,使用Postman测试接口后再进行前端开发,这样可以减少很多调试时间。