# 基于Spring和MySQL的学生成绩管理系统 **Repository Path**: ren2004/springboot ## Basic Information - **Project Name**: 基于Spring和MySQL的学生成绩管理系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-30 - **Last Updated**: 2024-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 基于Spring和MySQL的学生成绩管理系统 设计要求:使用Springboot和MySQL完成学生成绩管理系统的设计和实现。 基于Spring boot构建系统的后端服务,配置MySQL数据库以及与系统之间的连接,通过http请求触发学生信息的增删查改。 设计内容: 1)使用Springboot完成学生成绩管理系统的后端开发。 2)基于Spring框架和mybatis组件实现对MySQL数据库的操作。 3)通过http请求触发业务操作。 ## Spring Boot简介 Spring Boot 是一个基于 Spring 框架的开源框架,用于简化 Spring 应用程序的初始搭建和开发过程。它通过提供约定优于配置的方式,尽可能减少开发者的工作量,使得开发 Spring 应用变得更加快速、便捷和高效。 Spring Boot 的主要特点包括: 1. **简化配置**: Spring Boot 遵循约定优于配置的原则,减少了传统 Spring 应用中的大量配置。它通过自动配置(auto-configuration)和起步依赖(starter dependencies)来简化项目的配置过程,让开发者可以快速搭建起一个可运行的 Spring 应用。 2. **集成性强**: Spring Boot 提供了大量的开箱即用的特性和功能,如内嵌的 Servlet 容器(如Tomcat、Jetty或Undertow)、健康检查、指标监控等。它还整合了诸多常用的库和框架,如Spring Data、Spring Security等,使得开发者可以快速构建出功能完善的应用。 3. **微服务支持**: Spring Boot 非常适合用于构建微服务架构。它提供了丰富的支持,如通过Spring Cloud进行微服务架构的开发,集成了服务发现、配置中心、负载均衡等功能,帮助开发者构建可伸缩、高可用的微服务系统。 4. **内嵌服务器**: Spring Boot 可以将应用程序打包成一个可执行的 JAR 文件,并内置了常用的 Servlet 容器,如 Tomcat、Jetty 或 Undertow。这样一来,开发者可以通过简单的 **java -jar** 命令来运行应用程序,而无需部署到外部应用服务器。 5. **生态丰富**: 由于 Spring Boot 的广泛应用和强大生态系统,开发者可以轻松地使用各种扩展和插件,如 Actuator、Spring Boot DevTools 等,提高开发效率和应用质量。 ## Spring-boot项目结构 image.png ## Mybatis介绍: MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。MyBatis的优势在于灵活,它几乎可以代替JDBC,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。同时提供了接口编程。目前MyBatis的数据访问层 DAO (Data Access Objects))是不需要实现类的,它只需要一个接口和XML(或者注解)。MyBatis提供自动映射、动态SQL、级联、缓存、注解、代码和SQL分离等特性,使用方便,同时也可以对SQL进行优化。因为其具有封装少、映射多样化、支持存储过程、可以进行SQL优化等特点,使得它成为了国内Java 互联网中首选的持久框架 GET、POST、PUT、PATCH和DELETE是HTTP协议中常用的几种请求方法,它们在用途和安全性等方面存在区别 | | **用途** | 安全性 | | -------------- | ------------------------------------------------------------ | ------ | | GET(SELECT) | 用于请求数据,通常不会导致服务器状态的改变。适用于获取资源信息和查询操作 | 安全 | | POST(CREATE) | 用于提交数据到服务器,通常用于创建新资源或更新资源,会改变服务器状态 | 不安全 | | PUT(UPDATE) | 用于更新或创建资源,数据完全替换现有资源内容 | 不安全 | | PATCH(UPDATE) | 用于对资源进行部分更新,只发送需要修改的字段 | 不安全 | | DELETE(DELETE) | 用于删除指定的资源,会导致资源被永久移除 | 不安全 | ## 创建数据库表 ### 建库语句 ```mysql CREATE TABLE student_grades ( id INT AUTO_INCREMENT PRIMARY KEY, student_name VARCHAR(100), course_name VARCHAR(100), score DECIMAL(5, 2) ); ``` ### 插入数据 ```mysql INSERT INTO student_grades (student_name, course_name, score) VALUES ('Alice', 'Mathematics', 92.5); INSERT INTO student_grades (student_name, course_name, score) VALUES ('Bob', 'Physics', 85.3); INSERT INTO student_grades (student_name, course_name, score) VALUES ('Carol', 'Chemistry', 78.9); INSERT INTO student_grades (student_name, course_name, score) VALUES ('David', 'History', 88.0); ``` ## 关键代码 1. **GET 请求处理** **获取特定 ID 的学生成绩** ``` @GetMapping("/student/{id}") public StudentGrade getStudentGradeById(@PathVariable Long id) { return studentGradeService.findById(id); } ``` - 使用 `@GetMapping("/{id}")` 注解处理 GET 请求,`{id}` 是路径参数,用于指定要获取的学生成绩的 ID。 - `@PathVariable Long id`:将路径中的 `{id}` 参数绑定到方法的 `id` 参数上。 - 调用 `studentGradeService.findById(id)` 方法获取特定 ID 的学生成绩对象。 ![image-20240630011031092](C:\Users\33738\AppData\Roaming\Typora\typora-user-images\image-20240630011031092.png) **获取所有学生成绩** ```java @GetMapping("/student") public List getAllStudentGrades() { return studentGradeService.findAll(); } ``` - 使用 `@GetMapping` 注解处理 GET 请求,没有指定具体路径,表示获取所有学生成绩。 - 调用 `studentGradeService.findAll()` 方法返回所有学生成绩的列表。 image-20240630010429296 2. **POST 请求处理** **添加学生成绩** ```java @PostMapping("/student") public void addStudentGrade(@RequestBody StudentGrade studentGrade) { studentGradeService.save(studentGrade); } ``` - 使用 `@PostMapping` 注解处理 POST 请求,将请求体中的 JSON 数据转换为 `StudentGrade` 对象。 - 调用 `studentGradeService.save(studentGrade)` 方法保存新的学生成绩对象。 image-20240630010608503 3. **PUT 请求处理** **更新学生成绩** ```java @PutMapping("/student/{id}") public void updateStudentGrade(@PathVariable Long id, @RequestBody StudentGrade studentGrade) { studentGrade.setId(id); studentGradeService.save(studentGrade); } ``` - 使用 `@PutMapping("/student/{id}")` 注解处理 PUT 请求,`{id}` 是路径参数,用于指定要更新的学生成绩的 ID。 - `@RequestBody StudentGrade studentGrade`:从请求体中获取 JSON 数据并转换为 `StudentGrade` 对象。 - 设置 `studentGrade` 的 ID 为 `id`,然后调用 `studentGradeService.save(studentGrade)` 方法保存更新后的学生成绩。 image-20240630010855573 4. **DELETE 请求处理** **删除学生成绩** ```java @DeleteMapping("/student/{id}") public void deleteStudentGrade(@PathVariable Long id) { studentGradeService.delete(id); } ``` - 使用 `@DeleteMapping("/student/{id}")` 注解处理 DELETE 请求,`{id}` 是路径参数,用于指定要删除的学生成绩的 ID。 - 调用 `studentGradeService.delete(id)` 方法删除指定 ID 的学生成绩。 image-20240630010919342