如何使用Spring Boot将数据分成两个表?

时间:2017-05-31 08:58:14

标签: java spring postgresql spring-boot

现在我有两个表,第一个表叫做 StudentBase ,有三列: id firstname lastname 。第二个表名为 ResearchAssistant ,有两列: ID 课程。我设计了这样的表格,因为有不同类型的学生,研究助理就是其中之一。这两个表可以与主键 id 联合在一起。

我正在编写端点 / researchAssistant ,并将以下内容作为 POST 方法的请求主体。

{
    "firstname":"Jack",
    "lastname":"Peter",
    "course":"MATH"
}

我想要的是将名字姓氏保存到 StudentBase 表中,并将课程保存到 ResearchAssistant 表。并为两者生成相同的 id

我想到的第一个想法是构建3个模型类: StudentBase (id,firstname,lastname), ResearchAssistant (id,course)和 ResearchAssistantMixed (名字,姓氏,课程)。我使用 ResearchAssistantMixed 类作为请求体类。获取数据后,我将其分为新的 StudentBase 对象和 ResearchAssistant 对象,然后单独存储它们。

这个过程看起来非常愚蠢,性能应该很低。你有更好的想法吗? Spring Boot如何处理这种情况?谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个数据库问题,而不是Spring-boot问题。这就是我的方法(我假设你正在使用像MySql这样的关系数据库和用于ORM的hibernate):

数据库表:

student_base
    - id (primary key)
    - first_name
    _ last_name

research_assistant
    - id (primary key)
    - student_base_id (foreign key referencing id of student_base)
    - course

现在,您可以在Java中使用等效的实体类(用于休眠):

@Entity
@Table(name = "student_base")
public class StudentBase {

    @Id
    @Column(name = "id")
    private Integer id;

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

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

    // getters and setters
}

@Entity
@Table(name = "research_assistant")
public class ResearchAssistant {

    @Id
    @Column(name = "id")
    private Integer id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "student_base_id")
    private StudentBase studentBase;

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

    // getters and setters
}

现在在您的DAO中,您不需要做太多工作,只需保留student_base记录并使用返回的对象来保留research_assistant记录。例如:

StudentBase studentBase = persist(new StudentBase(1, "abc", "xyz");
persist(new ResearchAssistant(1, studentBase, "pqr");

您可以(并且应该)有两个单独的类来接受post API的请求对象(不要使用实体类来接受请求数据)。