【发布时间】:2018-09-04 22:13:45
【问题描述】:
问题
在代码生成过程中,我在配置到自定义 Pojo 的映射时遇到了一些问题。
问题
我已经实现了RecordMapperProvider,但我想知道如何注册它以在代码生成阶段使用,或者即使可以这样做?
更多上下文
我喜欢生成 Pojo 和 DAO 的事实,但我想自己定义 Pojo,而不需要太多配置代码。我正在使用ModelMapper 从类型映射到目标:
@Override
public <R extends Record, E> RecordMapper<R, E> provide(RecordType<R> recordType,
Class<? extends E> type) {
if (mapping.containsKey(type)) {
return record -> modelMapper.map(mapping.get(type), type);
}
return new DefaultRecordMapper<>(recordType, type);
}
如果有帮助,我将使用 DefaultConfiguration 对象(它是一个 bean)来配置 jOOQ:
@Bean
public DefaultConfiguration configuration() {
DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
jooqConfiguration.setConnectionProvider(dataSourceConnectionProvider());
jooqConfiguration.setExecuteListenerProvider(new DefaultExecuteListenerProvider(
jooqToSpringExceptionTranslator()));
jooqConfiguration.setSQLDialect(
SQLDialect.valueOf(env.getRequiredProperty("jooq.sql.dialect")));
jooqConfiguration.setRecordMapperProvider(new JooqRecordMapperFactory(modelMapper()));
return jooqConfiguration;
}
然后对于代码生成,我在 gradle 中对其进行配置:
jooq {
version = '3.10.5'
edition = 'OSS'
myDb(sourceSets.getByName("main")) {
jdbc {
driver = dbDriver
url = dbUrl
user = dbUsername
}
generator {
name = 'org.jooq.util.JavaGenerator'
strategy {
name = 'org.jooq.util.DefaultGeneratorStrategy'
}
database {
name = 'org.jooq.util.postgres.PostgresDatabase'
inputSchema = dbSchema
}
generate {
relations = true
deprecated = false
records = true
immutablePojos = true
fluentSetters = true
daos = true
}
target {
packageName = 'com.textiq.quinn.common.dao.model.generated'
}
}
}
}
我确信这两种配置之间存在脱节,但我无法从文档中收集到我是如何同步这些配置的。理想情况下,我希望 jOOQ 生成 Pojos(基于 ModelMapper 在我的 RecordMapperProvider 实现中提供的映射)并且还让 jOOQ 为这些 Pojos 提供 DAO。这可能吗?文档指出:
如果您使用 jOOQ 的代码生成器,您可以将其配置为为您生成 POJO,但您不需要使用这些生成的 POJO。你可以使用你自己的。请参阅手册中关于带有自定义 RecordMappers 的 POJO 的部分,以了解如何修改 jOOQ 的标准 POJO 映射行为。
来源:https://www.jooq.org/doc/3.9/manual/sql-execution/fetching/pojos/
这对我来说表明了这种可能性,但只会让我实现RecordMapperProvider,之后什么都没有。
【问题讨论】:
标签: sql pojo jooq modelmapper