📜  如何在 Spring Boot 中实现一对多映射?

📅  最后修改于: 2022-05-13 01:54:51.715000             🧑  作者: Mango

如何在 Spring Boot 中实现一对多映射?

Spring Boot 建立在 Spring 之上,包含了 Spring 的所有特性。 Spring 还提供了 JPA 和 hibernate 来提高 Spring 应用程序和数据库之间的数据操作效率。简单来说,我们可以说 JPA(Java持久性 API)就像一个接口,而休眠是接口方法的实现,就像在休眠的帮助下已经定义了插入的方式一样。在本文中,我们将讨论如何使用 Spring JPA 在 MySQL 表中插入值。 Spring Initializr 是一个基于 Web 的工具,我们可以使用它轻松生成 Spring Boot 项目的结构。它还为元数据模型中表达的项目提供各种不同的功能。该模型允许我们配置 JVM 支持的依赖项列表。在这里,我们将使用 spring 初始化程序创建应用程序的结构。

分步实施

第 1 步:转到此链接。根据要求填写详细信息。对于此应用程序:

Project: Maven
Language: Java
Spring Boot: 2.5.6
Packaging: JAR
Java: 11
Dependencies: Spring Web,Spring Data JPA, MySql Driver

单击生成将下载启动项目。

第 2 步:解压缩 zip 文件。现在打开一个合适的 IDE,然后转到 File > New > Project from existing sources > Spring-boot-app 并选择 pom.xml。点击提示导入更改,等待项目同步,如下图所示:

项目结构:

第 3 步:在 application.properties 文件中添加必要的属性。 (映射是数据库名称)

spring.datasource.username=root
spring.datasource.password=Aayush
spring.datasource.url=jdbc:mysql://localhost:3306/mapping
spring.jpa.hibernate.ddl-auto=update

第四步:进入 src->main-> Java->com->example->Mapping 并在 Models 文件夹中创建两个文件,即Address。 Java学生信息。Java

项目结构:

地址。 Java(映射表)

Java
package com.example.Mapping.Models;
 
import javax.persistence.*;
 
@Entity
// Adding the table name
@Table(name = "Address")
public class Address {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String cityname;
   
    // Mapping the column of this table
    @ManyToOne
    //Adding the name
    @JoinColumn(name = "Student_id")
    StudentInformation ob;
 
    Address() {}
 
    public Address(int id, String cityname, StudentInformation ob1)
    {
        this.id = id;
        this.cityname = cityname;
        this.ob = ob1;
    }
}


Java
@Entity
// Adding the table name
@Table(name = "Student")
public class StudentInformation {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int rollno;
    private String name;
   
    // Mapping to the other table
    @OneToMany(cascade = CascadeType.ALL)
    private Set
ob;     public int getRollno() { return rollno; }       public StudentInformation() {}       public StudentInformation(int rollno, String name)     {         this.rollno = rollno;         this.name = name;     }       public void setRollno(int rollno)     {           this.rollno = rollno;     }       public String getName() { return name; }       public void setName(String name) { this.name = name; } }


Java
package com.example.Mapping.Repository;
 
import com.example.Mapping.Models.Address;
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface AddressRepo extends JpaRepository {
 
}


Java
package com.example.Mapping.Repository;
 
import com.example.Mapping.Models.StudentInformation;
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface StudentRepo extends JpaRepository {
}


Java
@SpringBootApplication
public class MappingApplication implements CommandLineRunner {
 
    @Autowired StudentRepo ob;
    @Autowired AddressRepo ob1;
    public static void main(String[] args)
    {
        SpringApplication.run(MappingApplication.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception
    {
        StudentInformation student = new StudentInformation(1, "Aayush");
        ob.save(student);
        Address address = new Address(1, "Sonipat", student);
        ob1.save(address);
    }
}


学生信息。 Java(按表映射)

Java

@Entity
// Adding the table name
@Table(name = "Student")
public class StudentInformation {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int rollno;
    private String name;
   
    // Mapping to the other table
    @OneToMany(cascade = CascadeType.ALL)
    private Set
ob;     public int getRollno() { return rollno; }       public StudentInformation() {}       public StudentInformation(int rollno, String name)     {         this.rollno = rollno;         this.name = name;     }       public void setRollno(int rollno)     {           this.rollno = rollno;     }       public String getName() { return name; }       public void setName(String name) { this.name = name; } }

第 5 步:在项目结构中添加两个类的 JPA 存储库:

项目结构:

地址回购:

Java

package com.example.Mapping.Repository;
 
import com.example.Mapping.Models.Address;
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface AddressRepo extends JpaRepository {
 
}

学生回购:

Java

package com.example.Mapping.Repository;
 
import com.example.Mapping.Models.StudentInformation;
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface StudentRepo extends JpaRepository {
}

第 6 步:执行这些表中的信息

映射应用:

Java

@SpringBootApplication
public class MappingApplication implements CommandLineRunner {
 
    @Autowired StudentRepo ob;
    @Autowired AddressRepo ob1;
    public static void main(String[] args)
    {
        SpringApplication.run(MappingApplication.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception
    {
        StudentInformation student = new StudentInformation(1, "Aayush");
        ob.save(student);
        Address address = new Address(1, "Sonipat", student);
        ob1.save(address);
    }
}

现在运行主应用程序

终端输出:

学生表:

地址。Java