如何使用 jooq 连接 3 个表并迭代结果?

2024-01-09

我有课程表、学生表、时间表表。

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,我不会像你一样加入。您的方法创建一个派生表,其中

  1. 增加了没有价值的 SQL 语句的复杂性,例如维持声明时
  2. 防止对某些处理派生表性能不佳的数据库进行优化

相反,只需在一条语句中连接两个表:

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(使用前将#替换为@)

如何使用 jooq 连接 3 个表并迭代结果? 的相关文章

随机推荐

  • 使用 iTextSharp 在 PdfPCell 中自动调整图像大小

    我在 iTextSharp 库中的图像遇到一个奇怪的问题 我将图像添加到 PdfPCell 中 由于某种原因它被放大了 我怎样才能保持原来的大小 我虽然打印时图像是相同的 但图片上的差异在打印版本上是相同的 必须使用 ScaleXXX 手动
  • Silverlight NavigationService 始终为空

    我读到有些人遇到了这个问题 所以我想发布一个我在尝试处理这个问题时想到的 有点 优雅的解决方案 问题是当您在 Silverlight 中创建模板化页面时 ContentControls 没有父 Frame 的 NavigationServi
  • 单击时引导按钮显示蓝色轮廓

    我添加了这个 但单击按钮时仍然会出现蓝色轮廓 btn focus outline none 怎么去掉那个丑陋的东西 可能您的属性正在被覆盖 尝试附加 important与 active 一起添加到您的代码中 btn focus btn ac
  • 处理 .NET IDisposable 对象

    我用 C 工作 而且我对使用相当松懈using块来声明实现的对象IDisposable 显然你总是应该这样做 然而 我没有找到一种简单的方法来知道我何时犯了错误 Visual Studio 似乎没有以任何方式表明这一点 我只是错过了什么吗
  • Airflow 能否持续访问短期动态生成任务的元数据?

    我有一个 DAG 每当检测到文件时FileSensor 为每个文件生成任务以 1 将文件移动到暂存区域 2 触发单独的 DAG 来处理文件 FileSensor gt Move File1 gt TriggerDAG File1 gt Do
  • 在 CSS 中将标题放在 2 条水平线内

    I want to put an h3 heading between 2 pairs of horizontal line just like that 任何人都可以帮助我实现这个想法 在 html css 中 UPDATE 请问我该如何
  • Python:从文件中选择随机行,然后删除该行

    我是 Python 新手 因为我是通过 CodeAcademy 课程学习的 需要一些帮助来解决这个问题 我有一个文件 TestingDeleteLines txt 大约有 300 行文本 现在 我试图让它从该文件中随机打印 10 行 然后删
  • 我应该创建一个 DateRange 对象吗?

    我的一些域对象包含日期范围作为一对开始和结束日期属性 public class Period public DateTime EffectiveDate get set public DateTime ThroughDate get set
  • keycloak中的邮件内容可以修改吗?

    我是 Keycloak 的新手 我的项目使用 keycloak 作为身份验证服务器 目前我正在我的项目中开发用户维护 因此当使用 WEB API 在 keycloak 中创建新用户时 我想向新创建的用户发送一封电子邮件 表示欢迎使用该应用程
  • 如何从 Stripe 获取本地化错误消息

    我们的一位客户触发了 您的卡资金不足 刷卡时出错登记 我们稍后才会收取费用 并且我们无法显示有用的错误消息 因为我们没有针对此错误的本地化信息 虽然我的兄弟姐妹问题直接在 Stripe Elements 中显示 本地化 支付源注册错误 ht
  • 使用 EVP 接口的 AES-GCM OpenSSL C 示例

    对于AES GCM加密 解密 我尝试了这个 但是有问题 ctx EVP CIPHER CTX new Get the cipher cipher EVP aes 128 gcm define GCM IV 000000000000 defi
  • 未被捕获(承诺)

    我知道这个问题很常见 我正在使用 es6 Promise 并且我有多个层 在运行时 当我没有兑现承诺时 我有Uncaught in promise 在我的控制台中 但事实是我确实在代码中发现了它的较低部分 快速简化示例 LoginApi j
  • 类型错误:braintree.connect 不是一个函数

    我已经使用它的文档实现了 Braintree 但是在终端中遇到了这个错误 它表明 Braintree connect 不是一个函数 但在文档中它已被硬编码 var gateway braintree connect environment
  • 如何在 GitHub 上分叉非 GitHub 存储库?

    这有最佳实践吗 我想要么 创建一个存储库 将原始存储库添加为上游远程 创建一个 镜像 存储库 然后分叉它 创建一个 镜像 存储库 然后创建一个 主题分支 其他的东西 有关的 help github com send pull request
  • 呈现新视图控制器后关闭当前视图控制器 - swift

    我正试图解雇一位 VC 并提出一位新的 VC 但我不希望旧的 VC 继续存在 我使用下面的代码来关闭当前的 VC 并呈现新的 VC 但这样一来 解雇和出席之间就有一个时间间隔 我不希望用户注意到这一点 所以 我想先介绍一下新的 VC 然后再
  • Gradle:无法创建 com.android.build.gradle.internal.dsl.SigningConfig_Decolated 类型的实例

    我在 Jenkins 上运行 Gradle 时遇到问题 A problem occurred evaluating project app gt Failed to apply plugin id com android applicati
  • 如何让chocolatey将python2安装到自定义路径中?

    我正在安装 Python 2 7 11 使用巧克力味 https chocolatey org 它安装到C tools python2 choco install python2 y 有什么办法可以让Python安装到C Python27反
  • Ruby &&= 边缘情况

    有点边缘情况 但知道为什么 会这样表现吗 我用的是1 9 2 obj Object new obj instance eval bar bar gt nil expected obj instance variables gt so obj
  • 有多少百分比的 Windows 机器支持 OpenGL [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 jooq 连接 3 个表并迭代结果?

    我有课程表 学生表 时间表表 table course id name table student id name table schedule id c id s id 现在我想将时间表表与课程和学生表左连接 问题 1 在 jooq 中连