如何在 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