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