Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

RecordMapper

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

在一个更函数式的操作模式中,您可能希望编写回调函数,将 select 语句的结果映射到记录中,以便进行一些处理。这是 Spring 的 JdbcTemplate 中常见的数据访问模式,jOOQ 也提供了这种模式。使用 jOOQ,您可以实现自己的 org.jooq.RecordMapper 类,并将它们插入 jOOQ 的 org.jooq.ResultQuery

// Write callbacks to receive records from select statements
List<Integer> ids =
create.selectFrom(BOOK)
      .orderBy(BOOK.ID)
      .fetch()
      .map(BookRecord::getId);

// Or more concisely, as fetch().map(mapper) can be written as fetch(mapper):
create.selectFrom(BOOK)
      .orderBy(BOOK.ID)
      .fetch(BookRecord::getId);

// Or using a lambda expression:
create.selectFrom(BOOK)
      .orderBy(BOOK.ID)
      .fetch(book -> book.getId());

// Of course, the lambda could be expanded into the following anonymous RecordMapper:
create.selectFrom(BOOK)
      .orderBy(BOOK.ID)
      .fetch(new RecordMapper<BookRecord, Integer>() {
          @Override
          public Integer map(BookRecord book) {
              return book.getId();
          }
      });

org.jooq.Records 提供了一个替代实用程序,当使用 类型安全的 Record[N] 类型和构造函数引用时,该实用程序非常有用

// Use Java 16 record types as simple DTOs
record Book (int id, String title) {}

List<Book> books =
create.select(BOOK.ID, BOOK.TITLE)
      .from(BOOK)
      .orderBy(BOOK.ID)
      .fetch(Records.mapping(Book::new));

您的自定义 RecordMapper 类型可以通过 jOOQ 的 POJO 映射 API 自动使用,方法是将 RecordMapperProvider 注入到您的 Configuration 中。

反馈

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

The jOOQ Logo