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