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();
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!