可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

Record 与 TableRecord

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

jOOQ 理解到在 表表达式的声明式类型方面,SQL 比 Java 更具表现力。作为一种声明式语言,SQL 允许创建即席行值表达式(具有索引列的记录或元组)和记录(具有命名列的记录)。在 Java 中,在相同程度上这是不可能的。

然而,有时您希望使用强类型记录,当您知道您只从单个表进行选择时。

获取强类型或弱类型记录

当仅从单个表获取数据时,如果您使用 jOOQ 的 代码生成器为您的数据库表生成 TableRecords,jOOQ 将知道表表达式的类型。为了获取此类强类型记录,您将必须使用简单的 select API

// Use the selectFrom() method:
BookRecord book = create.selectFrom(BOOK).where(BOOK.ID.eq(1)).fetchOne();

// Typesafe field access is now possible:
System.out.println("Title       : " + book.getTitle());
System.out.println("Published in: " + book.getPublishedIn());

当您使用 DSLContext.selectFrom() 方法时,jOOQ 将返回参数表提供的记录类型。但请注意,您将无法再使用任何修改您的表表达式类型的子句。这包括

将自定义行类型映射到强类型记录

有时,您可能只想显式选择列的子集,但仍然使用强类型记录。或者,您可能想要连接一对一关系并在连接后接收两个单独的强类型记录。

在上述两种情况下,您都可以使用 Record.into(Table)org.jooq.Record“转换”为 org.jooq.TableRecord 类型。

// Join two tables
Record record = create.select()
                      .from(BOOK)
                      .join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID))
                      .where(BOOK.ID.eq(1))
                      .fetchOne();

// "extract" the two individual strongly typed TableRecord types from the denormalised Record:
BookRecord book = record.into(BOOK);
AuthorRecord author = record.into(AUTHOR);

// Typesafe field access is now possible:
System.out.println("Title       : " + book.getTitle());
System.out.println("Published in: " + book.getPublishedIn());
System.out.println("Author      : " + author.getFirstName() + " " + author.getLastName();

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的反馈!

The jOOQ Logo