[英]jOOQ Custom Pojo & DAO Generation
問題
我在代碼生成期間配置映射到自定義 Pojos 時遇到一些問題。
問題
我已經實現RecordMapperProvider
但想知道如何注冊它以便在代碼生成階段使用它,或者即使這可能嗎?
更多上下文
我喜歡生成 Pojos 和 DAO 的事實,但我想自己定義 Pojo 而無需太多配置代碼。 我正在使用ModelMapper
從類型到目標 map:
@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 object(這是一個 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 生成 Pojo(基於ModelMapper
在我的RecordMapperProvider
實現中提供的映射),並讓 jOOQ 為這些 Pojo 提供 DAO。 這可能嗎? 文件指出:
如果您正在使用 jOOQ 的代碼生成器,您可以將其配置為為您生成 POJO,但您不需要使用那些生成的 POJO。 你可以使用你自己的。 請參閱手冊中關於帶有自定義 RecordMappers 的 POJO 的部分,以了解如何修改 jOOQ 的標准 POJO 映射行為。
來源: https://www.jooq.org/doc/3.9/manual/sql-execution/fetching/pojos/
對我來說,這表明了這種可能性,但只會讓我實現RecordMapperProvider
,此后什么也沒有。
我已經實現了RecordMapperProvider,但想知道如何注冊它以在代碼生成階段使用,或者即使可以實現?
不,不可能,開箱即用。
我喜歡生成Pojos和DAO的事實,但是我想自己定義Pojo,而無需過多的配置代碼
然后,我建議關閉POJO和DAO的生成,並自己滾動。 創建DAO的手動實現,或擴展JavaGenerator
來實現。
我遲到了幾年,但我實際上找到了一種非常簡單的方法來做到這一點。 我承認它有點脆弱,但您可以進一步完善它以滿足您的需要。
jooq-generator
public class Generator extends JavaGenerator {
@Override
public boolean generatePojos() {
return false;
}
}
public class MyGeneratorStrategy extends DefaultGeneratorStrategy {
@Override
public String getJavaPackageName(Definition definition, Mode mode) {
if (mode != Mode.POJO) {
return super.getJavaPackageName(definition, mode);
}
return "com.example.my.model.package.prefix";
}
}
jooqGenerator project(":jooq-generator")
jooq {
configurations {
main {
generationTool {
generator {
name = 'com.example.my.package.name.Generator'
strategy {
name = 'com.example.my.package.name.MyGeneratorStrategy'
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.