具有多个联接的多个查询与多个单个查询

时间:2017-01-11 05:52:15

标签: mysql hibernate rest jdbc

假设有一个实体

public class Subject {

    private int id;
    private String name;
    private List<Teacher> teacher;
    private List<Book> books;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Teacher> getTeacher() {
        return teacher;
    }
    public void setTeacher(List<Teacher> teacher) {
        this.teacher = teacher;
    }
    public List<Book> getBooks() {
        return books;
    }
    public void setBooks(List<Book> books) {
        this.books = books;
    }

}

对于Rest API获取主题详细信息,其中我将获得一个id主题。

我需要获取教师列表和书籍列表 更明智的做法是明智而灵活。

(1)带有连接的单个查询 (2)1个用户查询,然后1个查询教师用subject_id作为过滤器,然后1个查询书籍,用subject_id作为过滤器

请考虑性能,实体构建逻辑和变更的灵活性,例如。在相同的API用户可以提供一个标志来告知是否包括书籍列表作为响应。 如何在企业项目中决定使用哪种方法。

1 个答案:

答案 0 :(得分:2)

这取决于......

  • 在最坏的情况下TeacherSubject的数量是多少?
  • 在最坏的情况下BookSubject的数量是多少?
  • 在最坏的情况下有多少Subject
  • 是否有其他链接实体?

如果回复是10, 50, 1000, no,结果可能会返回500 000行(10 * 50 * 1000)!

你应该考虑笛卡尔积

如果笛卡尔积不成问题,则连接速度更快。