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

RecordMapperProvider

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

在前几节中,我们已经了解了如何创建 RecordMapper 类型,以将 jOOQ 记录映射到任意对象。我们还了解了 jOOQ 如何提供默认算法,将 jOOQ 记录映射到 POJOs。 您自己的自定义领域模型可能要复杂得多,但是您希望避免每次需要时都查找最合适的 RecordMapper。 为此,您可以为 jOOQ 的 Configuration 提供您自己的 org.jooq.RecordMapperProvider 接口的实现。 这里给出一个例子

DSL.using(new DefaultConfiguration()
   .set(connection)
   .set(SQLDialect.ORACLE)
   .set(
       new RecordMapperProvider() {
           @Override
           public <R extends Record, E> RecordMapper<R, E> provide(RecordType<R> recordType, Class<? extends E> type) {

               // UUID mappers will always try to find the ID column
               if (type == UUID.class) {
                   return new RecordMapper<R, E>() {
                       @Override
                       public E map(R record) {
                           return (E) record.getValue("ID");
                       }
                   }
               }

               // Books might be joined with their authors, create a 1:1 mapping
               if (type == Book.class) {
                   return new BookMapper();
               }

               // Fall back to jOOQ's DefaultRecordMapper, which maps records onto
               // POJOs using reflection.
               return new DefaultRecordMapper(recordType, type);
           }
       }
   ))
   .selectFrom(BOOK)
   .orderBy(BOOK.ID)
   .fetchInto(UUID.class);

上面的例子非常简单,表明您可以完全灵活地覆盖 jOOQ 的记录到 POJO 的映射机制。

使用第三方库

有一些有用的库实现了自定义的、更通用的映射算法。 其中一些专门用于与 jOOQ 一起使用。 其中包括

反馈

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

The jOOQ Logo