我有课程表、学生表、时间表表。
table course(id, name, ....),
table student(id, name, ...),
table schedule(id, c_id, s_id).
现在我想将时间表表与课程和学生表左连接。
问题(1):
在 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();
问题2):
当我得到结果时,将结果拆分为 Student 对象和 Course 对象的最佳方法是什么?我的意思是,由于类型是 Result?,有什么方法可以将结果映射到学生、课程实体,而不是像这样乏味地执行以下操作:
for(Record r: result){
Student s = new Student(r.filed(), r.filed()...);
Course c = new Course(r.filed(), r.filed()....)
}
Answer 1
在 jooq 中连接这 3 个表的最佳方法是什么?我认为这就像[...]
虽然您的查询是correct,我不会像你一样加入。您的方法创建一个派生表,其中
- 增加了没有价值的 SQL 语句的复杂性,例如维持声明时
- 防止对某些处理派生表性能不佳的数据库进行优化
相反,只需在一条语句中连接两个表:
Result<?> result = sql
.select()
.from(SCHEUDLE)
.leftOuterJoin(COURSE)
.on(SCHEDULE.CID.eq(COURSE.ID))
.leftOuterJoin(STUDENT)
.on(SCHEDULE.SID.eq(STUDENT.ID))
.fetch();
Answer 2
您可以使用多种方法之一Record.into()
方法,例如Record.into(Table) http://www.jooq.org/javadoc/latest/org/jooq/Record.html#into-org.jooq.Table-
for (Record r : result) {
StudentRecord s = r.into(STUDENT);
CourseRecord c = r.into(COURSE);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)