# 基于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项目结构
## 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 的学生成绩对象。

**获取所有学生成绩**
```java
@GetMapping("/student")
public List getAllStudentGrades() {
return studentGradeService.findAll();
}
```
- 使用 `@GetMapping` 注解处理 GET 请求,没有指定具体路径,表示获取所有学生成绩。
- 调用 `studentGradeService.findAll()` 方法返回所有学生成绩的列表。
2. **POST 请求处理**
**添加学生成绩**
```java
@PostMapping("/student")
public void addStudentGrade(@RequestBody StudentGrade studentGrade) {
studentGradeService.save(studentGrade);
}
```
- 使用 `@PostMapping` 注解处理 POST 请求,将请求体中的 JSON 数据转换为 `StudentGrade` 对象。
- 调用 `studentGradeService.save(studentGrade)` 方法保存新的学生成绩对象。
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)` 方法保存更新后的学生成绩。
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 的学生成绩。
