jOOQ Custom Pojo& DAO代

时间:2018-03-26 17:13:21

标签: sql pojo jooq modelmapper

问题

我在代码生成期间配置映射到自定义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(基于ModelMapperRecordMapperProvider的实现中提供的映射),并且还有jOOQ为这些Pojos提供DAO。这可能吗?文档说明:

  

如果您正在使用jOOQ的代码生成器,您可以将其配置为为您生成POJO,但您不需要使用这些生成的POJO。你可以使用自己的。请参阅手册中有关使用自定义RecordMappers的POJO的部分,以了解如何修改jOOQ的标准POJO映射行为。

来源:https://www.jooq.org/doc/3.9/manual/sql-execution/fetching/pojos/

对我而言,这表明了这种可能性,但只会导致我实施RecordMapperProvider,之后就没有了。

1 个答案:

答案 0 :(得分:1)

  

我已经实现了RecordMapperProvider,但想知道如何在代码生成阶段注册它,或者即使可能的话也可以使用它?

不,这是不可能的,开箱即用。

  

我喜欢Pojos&amp; amp;生成了DAO,但我想在没有太多配置代码的情况下自己定义Pojo

然后,我建议关闭POJO和DAO的生成并自己动手。或者,创建DAO的手动实现,或者扩展JavaGenerator以执行此操作。