Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多)

下面是“Spring Boot 整合 JPA 数据模型关联使用操作(一对一、一对多、多对多)”的完整攻略。

简介

在讲解具体的操作步骤之前,我们需要先了解一些基础知识。

JPA

JPA,全称为 Java Persistence API,即 Java 持久化 API,是 Java EE 技术的一部分,是一种轻量级的 Java ORM 框架,主要是作为 Hibernate、TopLink 等 ORM 框架的规范。

数据模型关联

在开发实际应用时,一个实体类往往不是孤立地存在,它需要与其他实体类产生联系,这些联系被称为数据模型关联。常见的数据模型关联有以下几种:

  • 一对一:表示两个实体类之间的关系是一对一的,例如,“一张学生证对应一个学生”。
  • 一对多:表示一个实体类有多个相同类型的实体类与之关联,例如,“一个部门对应多个员工”。
  • 多对多:表示两个实体类之间的关系是多对多的,例如,“一个学生可以选择多门课程,一门课程可以被多个学生选择”。

Spring Boot

Spring Boot 是一个快速开发的框架,不需要进行繁琐的配置,体现了“约定优于配置”的思想。使用 Spring Boot 可以快速构建 Web 应用程序。

一对一关系

在 JPA 中,可以通过 @OneToOne 注解实现一对一关系。

创建实体类

我们以一个学生证实体类和一个学生实体类为例,来演示一对一关系。首先需要创建两个实体类,代码如下:

@Data
@Entity
@Table(name = "tb_student_card")
public class StudentCard {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "card_number")
    private String cardNumber;

    @OneToOne(mappedBy="studentCard")
    private Student student;
}
@Data
@Entity
@Table(name = "tb_student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="card_id", referencedColumnName="id")
    private StudentCard studentCard;
}

上述实体类中,@OneToOne 注解表示了这两个实体类之间的一对一关系,其中 Student 实体类中的 @JoinColumn 注解表示了与 StudentCard 实体类之间的关联关系,通过该注解可以指定外键对应的字段。

创建 DAO 层

  1. 创建继承 JpaRepository 的 StudentDao 和 StudentCardDao 接口:

```java
public interface StudentDao extends JpaRepository{}

public interface StudentCardDao extends JpaRepository{}
```

  1. 在 Service 层中进行业务操作:

```java
@Service
public class StudentService {
@Autowired
private StudentDao studentDao;
@Autowired
private StudentCardDao studentCardDao;

 public void saveStudent(Student student) {
   studentDao.save(student);
 }

 public void saveStudentCard(StudentCard studentCard) {
   studentCardDao.save(studentCard);
 }

 public void deleteStudent(Long id) {
   studentDao.deleteById(id);
 }

 public void deleteStudentCard(Long id) {
   studentCardDao.deleteById(id);
 }

}
```

创建 Controller 层

  1. 在 Controller 中调用 Service 层方法进行业务操作:

```java
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;

 @PostMapping("/saveStudent")
 public void saveStudent(@RequestBody Student student) {
   studentService.saveStudent(student);
 }

 @PostMapping("/saveStudentCard")
 public void saveStudentCard(@RequestBody StudentCard studentCard) {
   studentService.saveStudentCard(studentCard);
 }

 @DeleteMapping("/deleteStudent/{id}")
 public void deleteStudent(@PathVariable Long id) {
   studentService.deleteStudent(id);
 }

 @DeleteMapping("/deleteStudentCard/{id}")
 public void deleteStudentCard(@PathVariable Long id) {
   studentService.deleteStudentCard(id);
 }

}
```

至此,我们已经完成了一对一关系的实现。

一对多关系

在 JPA 中,可以通过 @OneToMany 和 @ManyToOne 注解实现一对多关系。

创建实体类

我们以一个部门实体类和一个员工实体类为例,来演示一对多关系。需要创建两个实体类,代码如下:

@Data
@Entity
@Table(name = "tb_department")
public class Department {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "department")
    private List<Employee> employees;
}
@Data
@Entity
@Table(name = "tb_employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "job")
    private String job;

    @ManyToOne(targetEntity = Department.class)
    @JoinColumn(name = "dept_id")
    private Department department;
}

上述实体类中,@OneToMany 注解表示了 Department 实体类和 Employee 实体类之间的一对多关系,其中 mappedBy 属性指定了关联关系的另一端属性名,是 Employee 实体类中的 department 对应的属性。@ManyToOne 注解表示了 Employee 实体类和 Department 实体类之间的多对一关系。

创建 DAO 层

创建继承 JpaRepository 的 DepartmentDao 和 EmployeeDao 接口:

public interface DepartmentDao extends JpaRepository<Department, Long>{}

public interface EmployeeDao extends JpaRepository<Employee, Long>{}

在 Service 层中进行业务操作:

@Service
public class EmployeeService {
  @Autowired
  private DepartmentDao departmentDao;
  @Autowired
  private EmployeeDao employeeDao;

  public void saveDepartment(Department department) {
    departmentDao.save(department);
  }

  public void saveEmployee(Employee employee) {
    employeeDao.save(employee);
  }

  public void deleteDepartment(Long id) {
    departmentDao.deleteById(id);
  }

  public void deleteEmployee(Long id) {
    employeeDao.deleteById(id);
  }
}

创建 Controller 层

在 Controller 中调用 Service 层方法进行业务操作:

@RestController
@RequestMapping("/employee")
public class EmployeeController {
  @Autowired
  private EmployeeService employeeService;

  @PostMapping("/saveDepartment")
  public void saveDepartment(@RequestBody Department department) {
    employeeService.saveDepartment(department);
  }

  @PostMapping("/saveEmployee")
  public void saveEmployee(@RequestBody Employee employee) {
    employeeService.saveEmployee(employee);
  }

  @DeleteMapping("/deleteDepartment/{id}")
  public void deleteDepartment(@PathVariable Long id) {
    employeeService.deleteDepartment(id);
  }

  @DeleteMapping("/deleteEmployee/{id}")
  public void deleteEmployee(@PathVariable Long id) {
    employeeService.deleteEmployee(id);
  }
}

至此,我们已经完成了一对多关系的实现。

多对多关系

在 JPA 中,可以通过 @ManyToMany 注解实现多对多关系。

创建实体类

我们以一个课程实体类和一个学生实体类为例,来演示多对多关系。需要创建两个实体类,代码如下:

@Data
@Entity
@Table(name = "tb_course")
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @ManyToMany
    @JoinTable(name = "tb_course_student", joinColumns = @JoinColumn(name = "course_id"), inverseJoinColumns = @JoinColumn(name = "student_id"))
    private List<Student> students;
}
@Data
@Entity
@Table(name = "tb_student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

    @ManyToMany(mappedBy = "students")
    private List<Course> courses;
}

上述实体类中,@ManyToMany 注解表示了 Course 实体类和 Student 实体类之间的多对多关系,其中 @JoinTable 注解指定了关联关系的数据表名称,joinColumns 属性指定了与 Course 实体类关联的数据表中的字段,inverseJoinColumns 属性指定了与 Student 实体类关联的数据表中的字段。@ManyToMany 注解需要在双方实体类中都定义,并且在一方定义 mappedBy 属性。

创建 DAO 层

创建继承 JpaRepository 的 CourseDao 和 StudentDao 接口:

public interface CourseDao extends JpaRepository<Course, Long>{}

public interface StudentDao extends JpaRepository<Student, Long>{}

在 Service 层中进行业务操作:

@Service
public class CourseService {
  @Autowired
  private CourseDao courseDao;
  @Autowired
  private StudentDao studentDao;

  public void saveCourse(Course course) {
    courseDao.save(course);
  }

  public void saveStudent(Student student) {
    studentDao.save(student);
  }

  public void deleteCourse(Long id) {
    courseDao.deleteById(id);
  }

  public void deleteStudent(Long id) {
    studentDao.deleteById(id);
  }
}

创建 Controller 层

在 Controller 中调用 Service 层方法进行业务操作:

@RestController
@RequestMapping("/course")
public class CourseController {
  @Autowired
  private CourseService courseService;

  @PostMapping("/saveCourse")
  public void saveCourse(@RequestBody Course course) {
    courseService.saveCourse(course);
  }

  @PostMapping("/saveStudent")
  public void saveStudent(@RequestBody Student student) {
    courseService.saveStudent(student);
  }

  @DeleteMapping("/deleteCourse/{id}")
  public void deleteCourse(@PathVariable Long id) {
    courseService.deleteCourse(id);
  }

  @DeleteMapping("/deleteStudent/{id}")
  public void deleteStudent(@PathVariable Long id) {
    courseService.deleteStudent(id);
  }
}

至此,我们已经完成了多对多关系的实现。

以上就是关于“Spring Boot 整合 JPA 数据模型关联使用操作(一对一、一对多、多对多)”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java实现银行管理系统

    Java实现银行管理系统攻略 1. 系统需求分析 在进行银行管理系统的开发前,我们需要对系统的需求进行分析。一般来说,银行管理系统需要包含以下功能模块: 用户管理:包括客户注册、登录、修改个人信息等功能。 账户管理:包括账户开户、查询余额、转账、存取款等功能。 交易管理:包括交易流水记录、账户冻结与解冻等功能。 系统管理:包括管理员登录、账号管理、数据备份等…

    Java 2023年5月19日
    00
  • Java中SimpleDateFormat日期格式转换详解及代码示例

    下面就详细讲解一下“Java中SimpleDateFormat日期格式转换详解及代码示例”的攻略。 1. 什么是SimpleDateFormat SimpleDateFormat是Java中一个非常实用的日期格式化类,它能够将日期按照指定的格式进行转换,并且还支持将字符串转换成日期。SimpleDateFormat类的格式化符号遵循类似于Unix系统下的日期…

    Java 2023年5月20日
    00
  • 使用JAVA实现http通信详解

    使用JAVA实现http通信可以通过以下几个步骤完成: 步骤1:引入相关包 在实现http通信之前,需要引入相关的包,这些包中包含了实现http通信所需要的类和方法。Java中实现http通信一般使用Apache提供的HttpComponents包,该包可以通过Maven引入,如下: <dependency> <groupId>org…

    Java 2023年5月18日
    00
  • 从零开始让你的Spring Boot项目跑在Linux服务器

    下面是从零开始让你的Spring Boot项目跑在Linux服务器的完整攻略。 一、准备工作1. 购买一台Linux服务器,获取root权限。2. 安装Java环境,可以使用yum安装或手动下载安装。 二、打包Spring Boot项目打包Spring Boot项目,生成可执行的jar包。使用以下命令进行打包: mvn package 三、上传jar包到服务…

    Java 2023年6月2日
    00
  • 使用springMVC所需要的pom配置

    以下是关于“使用SpringMVC所需要的POM配置”的完整攻略,其中包含两个示例。 使用SpringMVC所需要的POM配置 SpringMVC是一种基于Java的Web框架,它可以帮助我们快速地开发Web应用程序。在使用SpringMVC时,我们需要在项目中添加一些依赖库。本文将讲解使用SpringMVC所需要的POM配置。 添加SpringMVC依赖 …

    Java 2023年5月17日
    00
  • 基于JSP HttpServlet的详细介绍

    当谈到Java Web开发时,JSP和Servlet是不可或缺的两个技术。而HttpServlet是Servlet的一个特定类型,它是一种能够处理HTTP请求和响应的Java Servlet类。在本文中,我们将详细介绍基于JSP HttpServlet的攻略。 准备工作 在开始开发之前,我们需要确保我们的环境中正确安装并配置了以下工具: Java开发工具(如…

    Java 2023年6月15日
    00
  • 快速入手IntelliJ IDEA基本配置

    下面是“快速入手IntelliJ IDEA基本配置”的完整攻略。 1. 下载并安装IntelliJ IDEA 首先需要去官网下载并安装IntelliJ IDEA。根据自己的操作系统,选择相应版本进行下载。 2. 配置JDK 如果你还没有安装Java开发工具包(JDK),建议你先下载并安装,然后进行环境变量配置。 在IntelliJ IDEA打开设置栏,选择P…

    Java 2023年5月19日
    00
  • Spring声明式事务配置使用详解

    Spring声明式事务配置使用详解 什么是事务 事务是一组完整的业务操作,这些操作作为一个原子单元,要么全部成功,要么全部失败回滚,保证数据库中的数据一致性。 声明式事务的优点 Spring框架提供的声明式事务管理有以下几个好处: 代码简洁:通过使用声明式事务管理,Spring框架可以将所有的数据库事务处理的代码都放在配置文件中,这样就不需要在业务逻辑代码中…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部