我有COURSE,STUDENT,SCHEDULE表。
table course(id, name, ....),
table student(id, name, ...),
table schedule(id, c_id, s_id).
现在我想把课程和学生表留下连接时间表。
在jooq中加入这3个表的最佳方法是什么?我认为它就像:
TableLike<?> firstjoin = sql
.select()
.from(Tables.SCHEUDLE)
.leftOuterJoin(Tables.COURSE)
.on(Tables.SCHEDULE.CID.eq(Tables.COURSE.ID))
.asTable();
Result<?> result = sql
.select()
.from(firstjoin)
.leftOuterJoin(Tables.STUDENT)
.on(Tables.SCHEDULE.SID.eq(Tables.STUDENT.ID))
.fetch();
当我得到结果时,将结果拆分为Student对象和Course对象的最佳方法是什么?我的意思是因为类型是结果?,有没有什么方法可以将结果映射到学生,课程实体而不是单调乏味地做这样的事情:
for(Record r: result){
Student s = new Student(r.filed(), r.filed()...);
Course c = new Course(r.filed(), r.filed()....)
}
答案 0 :(得分:10)
在jooq中加入这3个表的最佳方法是什么?我认为它就像[...]
虽然您的查询正确,但我不会像您那样加入。您的方法创建了一个派生表,
相反,只需在一个语句中加入两个表:
Result<?> result = sql
.select()
.from(SCHEUDLE)
.leftOuterJoin(COURSE)
.on(SCHEDULE.CID.eq(COURSE.ID))
.leftOuterJoin(STUDENT)
.on(SCHEDULE.SID.eq(STUDENT.ID))
.fetch();
您可以使用各种Record.into()
方法之一,例如Record.into(Table)
for (Record r : result) {
StudentRecord s = r.into(STUDENT);
CourseRecord c = r.into(COURSE);
}