gpt4 book ai didi

java - 与 DAO 模式的对称关系

转载 作者:行者123 更新时间:2023-11-30 05:51:10 27 4
gpt4 key购买 nike

我正在尝试在Java中实现DAO模式,但我正在努力创建对称关系,例如,如果我有一个有学生的老师,我将在老师中创建一个列表,但我应该创建一个老师学生的属性(property)?

DAO 类如下所示:

public class TeacherDAO extends DAO<Teacher> {
public Teacher find(int id) {
Statement statement = Connection.getInstance();
// Get the teacher and the students
ResultSet rs = statement.executeQuery("SELECT * FROM teachers LEFT JOIN "
+ "students ON students.teacher_id = teacher.id")
DAO<Student> studentDAO = new StudentDAO();

Teacher teacher = new Teacher();
teacher.setId(rs.getInt("id"));
teacher.setName(rs.getString("name"));

List<Value> students = new ArrayList<>();
rs.beforeFirst();
// For each student, add it to the list (after hydratation)
while (rs.next() && rs.getInt("student.teacher_id") == teacher.getId()) {
students.add(studentDAO.find(rs.getInt("student.id")));
}
teacher.setstudents(students);

return teacher;
}

public boolean update(Teacher t) {...}
public boolean insert(Teacher t) {...}
public boolean delete(Teacher t) {...}
}

到目前为止没问题,但是如果 Student 有 Teacher 属性,我该如何编写 StudentDAO 的 find 代码呢?它会调用TeacherDAO的find,然后无限循环。

但是学生有教师属性是必要的,否则我如何在不指定相应教师的情况下插入新学生?

最佳答案

这也是为了处理ORM这类问题被创建。

如果您需要学生和教师之间的双向关系,您确实应该执行一次关系获取。

我注意到,在您的示例中,您想要加载教师及其关系。
这在某些情况下可能是理想的,但在其他情况下可能是不理想的。所以你可能应该参数化这个功能。我很快就会详细说明这一点。

在你的情况下,我可能会定义 findWithStudents(int teacherId)TeacherDAO将教师和代表加载到 find(int studentId, Teacher teacher)StudentDAO加载学生。
这样在StudentDAO ,该方法知道教师已经加载,并且不会再次加载。
如果正如所说的那样,您可能会在其他情况下出现过载。例如findWithTeacher(int studentId)StudentDAO加载学生和老师或 find(int teacherId)TeacherDAO只加载老师。

关于java - 与 DAO 模式的对称关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com