Spring boot一对多对象例子
时间: 2023-05-31 15:03:15 浏览: 108
假设我们有两个数据表,一个是学生表,另一个是课程表,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。这就是一个典型的一对多关系,下面我们来看看如何用Spring Boot实现这个例子。
首先,我们需要创建两个实体类,一个是学生类,另一个是课程类。学生类中包含学生的基本信息,课程类中包含课程的基本信息。
```java
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
private String gender;
@OneToMany(mappedBy = "student")
private List<Course> courses;
// 省略getter和setter
}
@Entity
@Table(name = "course")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer credit;
@ManyToOne
@JoinColumn(name = "student_id")
private Student student;
// 省略getter和setter
}
```
在学生类中,我们使用了@OneToMany注解来表示一个学生可以选修多门课程,mappedBy属性指定了课程类中的student属性来维护这个关系。在课程类中,我们使用了@ManyToOne注解来表示一门课程只能被一个学生选修,JoinColumn属性指定了外键的名称。
接下来,我们需要创建两个Repository接口,用来操作这两个实体类:
```java
@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {
}
@Repository
public interface CourseRepository extends JpaRepository<Course, Long> {
}
```
最后,我们可以在控制器中进行一些测试:
```java
@RestController
@RequestMapping("/api")
public class ApiController {
@Autowired
private StudentRepository studentRepository;
@Autowired
private CourseRepository courseRepository;
@GetMapping("/students")
public List<Student> getStudents() {
return studentRepository.findAll();
}
@GetMapping("/courses")
public List<Course> getCourses() {
return courseRepository.findAll();
}
@PostMapping("/students")
public Student addStudent(@RequestBody Student student) {
return studentRepository.save(student);
}
@PostMapping("/courses")
public Course addCourse(@RequestBody Course course) {
return courseRepository.save(course);
}
@PostMapping("/students/{id}/courses")
public Student addCourseToStudent(@PathVariable Long id, @RequestBody Course course) {
Student student = studentRepository.findById(id).orElse(null);
if (student != null) {
course.setStudent(student);
courseRepository.save(course);
student.getCourses().add(course);
studentRepository.save(student);
}
return student;
}
}
```
在这个例子中,我们定义了四个接口:
- /api/students:获取所有学生的信息。
- /api/courses:获取所有课程的信息。
- /api/students:添加一个新的学生。
- /api/courses:添加一个新的课程。
- /api/students/{id}/courses:为指定的学生添加一门课程。
最后,我们可以使用Postman等工具来测试这些接口,以验证我们的代码是否正确。
阅读全文