多表的DAO设计模式

问题描述 投票:0回答:1

现有 2 个 DAO

  1. 大学DAO.java
  2. StudentDAO.java

有一个新添加的 DAO 调用 ComputerDAO.java

Table Design

如果有如下查询那么什么是最好的设计?

显示大学模块中的所有大学及其学生姓名和计算机名称。 Sample University Module display

select * from university 
join student on uni_id = student_id
join computer on computer_id on uni_id
  1. 在 UniversityDAO.java 上实现 getUniStudentCompName() 方法
  2. 创建另一个 DAO 调用 UniversityStudentDAO.java 并实现方法 getUniStudentCompName()

最佳 DAO 实施。即新类或现有类实现

java dao
1个回答
0
投票

看ER图,computer表与University表无关,而是与student表相关。如果有学生桌那就还有电脑桌。

对于数据库支持,您将需要使用一些工具,例如 JPA 和 hibernate。该关系可以在名称字段上使用 OneToOne 进行注释。

您可以通过多种方式获取所需的结果。要开始使用,您可以查看:

  • 实现 JPA 数据休息并使用带有自定义查询的存储库接口。
@Query("SELECT name FROM Student s join query ... WHERE u.status = ?1")
Student getStudentData(UUID id); 

If you want a list then something like:

@Query("SELECT name FROM Student s join query ...")
Collection<Student> findAll(); 
  • 如果你要使用Springboot,请使用springboot投影,它非常简单且干净。

  • 您可以选择使用新的类名称,无论什么名称,并使用它来引导所有这些实体类。你可以这样做:

YourNewClass {
    // reference
    private UUID id

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "university_id", referencedColumnName = "id")
    private UniversityDAO universityDao;

    ..... 

}
© www.soinside.com 2019 - 2024. All rights reserved.