下面我会详细讲解“Springboot和Jpa实现学生CRUD操作代码实例”的完整攻略。
一、前置知识
在进行本篇攻略之前,需要掌握以下的技术和知识:
- Spring Boot的基本使用方法;
- JPA的基本使用方法;
- MySQL数据库的基本使用方法。
如果你还不熟悉这些知识,可以先查看相关的官方文档或者参考相关的教程。
二、创建Spring Boot项目
首先,我们需要创建一个Spring Boot项目并导入相应的依赖。
<!-- pom.xml -->
<!--Spring Boot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<type>pom</type>
</dependency>
<!-- Spring Boot Web 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.5</version>
</dependency>
<!-- Spring Boot Data JPA 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.4.5</version>
</dependency>
<!-- MySQL数据库相关依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
三、建立实体模型
在我们开始建立实体模型之前,需要在MySQL中建立一个名为“student”的数据表。表的结构如下:
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
接下来,我们来建立学生实体模型。
// Student.java
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private Integer age;
private Character gender;
// Getter 和 Setter 略
}
我们使用了JPA的注解来指定实体类和数据表之间的映射关系,实现了自动生成主键、字段名映射等功能。
四、创建Repository
接下来,我们需要创建Repository。
// StudentRepository.java
@Repository
public interface StudentRepository extends JpaRepository<Student, Integer> {
}
在这个示例中,我们使用了Spring Data JPA的默认实现,也可以自定义实现,实现更复杂的操作,例如分页、排序等。
五、创建Controller
接下来,我们需要创建Controller。
// StudentController.java
@RestController
@RequestMapping("/students")
public class StudentController {
@Autowired
private StudentRepository studentRepository;
@GetMapping("")
public List<Student> getAll() {
return studentRepository.findAll();
}
@GetMapping("/{id}")
public Student getById(@PathVariable Integer id) {
return studentRepository.findById(id).orElse(null);
}
@PostMapping("")
public Student create(@RequestBody Student student) {
return studentRepository.save(student);
}
@PutMapping("/{id}")
public Student update(@PathVariable Integer id, @RequestBody Student student) {
student.setId(id);
return studentRepository.save(student);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable Integer id) {
studentRepository.deleteById(id);
}
}
我们创建了CRUD操作(增、查、改、删)的相关API,使用@RestController、@RequestMapping等注解实现了请求映射和返回结果的序列化。
六、示例一
第一个示例是获取学生列表的操作:
// StudentControllerTest.java
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class StudentControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
void testGetAll() {
ResponseEntity<List<Student>> responseEntity = restTemplate.exchange(
"/students",
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<Student>>(){}
);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(responseEntity.getBody()).hasSize(10);
}
}
我们使用了Spring Boot的TestRestTemplate来发送HTTP请求,使用了匿名内部类来获取泛型参数列表(List
七、示例二
第二个示例是创建新学生的操作:
// StudentControllerTest.java
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class StudentControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
void testCreate() {
Student student = new Student();
student.setName("Tom");
student.setAge(18);
student.setGender('M');
ResponseEntity<Student> responseEntity = restTemplate.postForEntity(
"/students",
student,
Student.class
);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(responseEntity.getBody().getId()).isNotNull();
assertThat(responseEntity.getBody().getName()).isEqualTo("Tom");
assertThat(responseEntity.getBody().getAge()).isEqualTo(18);
assertThat(responseEntity.getBody().getGender()).isEqualTo('M');
}
}
我们使用了TestRestTemplate的postForEntity方法来发送POST请求,使用了断言来其他结果是否符合预期。
八、总结
到这里我们已经实现了基本的CRUD操作,同时也展现了Spring Boot和JPA的优秀特性,如轻量级、便捷、高效等。可以通过前面的两个示例来了解Spring Boot和JPA,以及如何实现基础的CRUD操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot和Jpa实现学生CRUD操作代码实例 - Python技术站