问题
我在代码生成期间配置映射到自定义Pojos时遇到一些问题。
问题
我已经实现了RecordMapperProvider
,但想知道如何在代码生成阶段注册它,或者即使可能的话?
更多情境
我喜欢Pojos& amp;生成了DAO,但我想在没有太多配置代码的情况下自己定义Pojo。我正在使用ModelMapper
从Type映射到Target:
@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
,之后就没有了。
答案 0 :(得分:1)
我已经实现了RecordMapperProvider,但想知道如何在代码生成阶段注册它,或者即使可能的话也可以使用它?
不,这是不可能的,开箱即用。
我喜欢Pojos&amp; amp;生成了DAO,但我想在没有太多配置代码的情况下自己定义Pojo
然后,我建议关闭POJO和DAO的生成并自己动手。或者,创建DAO的手动实现,或者扩展JavaGenerator
以执行此操作。