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 一起使用。 其中包括
- ModelMapper(带有显式的 jOOQ 集成)
- SimpleFlatMapper(带有显式的 jOOQ 集成)
- Orika Mapper(没有显式的 jOOQ 集成)
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!