问题
在代码生成期间,我在配置到自定义POJO的映射时遇到了一些问题。
问题
我已经实现了RecordMapperProvider
,但想知道如何注册它以在代码生成阶段使用,或者即使这是可能的?
更多上下文
我喜欢波霍斯
@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生成POJO(基于我的RecordMapperProvider实现中ModelMapper提供的映射),并让jOOQ为这些POJO提供DAO。这可能吗?文件说明:
如果您使用的是jOOQ的代码生成器,您可以将其配置为为生成POJO,但不需要使用生成的POJO。你可以用你自己的。请参阅手册中关于使用自定义记录映射器的POJO的部分,了解如何修改jOOQ的标准POJO映射行为。
资料来源:https://www.jooq.org/doc/3.9/manual/sql-execution/fetching/pojos/
对我来说,这表明了这一点的可能性,但只导致我实现了RecordMapperProvider,之后什么都没有。
我参加聚会迟到了几年,但实际上我找到了一个非常简单的方法。我承认它有点脆弱,但你可以进一步改进它以满足你的需要。
jooq生成器
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";
}
}
jooq {
configurations {
main {
generationTool {
generator {
name = 'com.example.my.package.name.Generator'
strategy {
name = 'com.example.my.package.name.MyGeneratorStrategy'
}
}
}
}
}
}
我已经实现了RecordMapperProvider,但我想知道如何注册它以在代码生成阶段使用,或者即使这是可能的?
不,这是不可能的,开箱即用。
我喜欢波霍斯
然后,我建议关闭POJO和DAO的生成并滚动您自己的。要么,创建DAO的手动实现,要么扩展JavaGenerator
来做到这一点。
我们有一些反映到多个数据库字段的自定义类型。例如 存储为3个单独的db字段。总是写作很无聊 然后从相应的记录字段中获取记录并创建PersonName类型。 其思想是定义一些多列自定义字段,在查询执行期间由jooq将其扩展为三个“真实”字段,并打包到结果中的一个PersonName对象。 看起来用可以做这样的事情,但我想知道,可能已经有解决这种情况的方法了。
我有一个特定的Postgre架构,它收集所有定义类型的表,如,其中的值可以是,等。 我们需要获取所有这些表,并根据它们生成枚举,以便以后在我们的应用程序中使用。因此,这些枚举应该如下所示: 我们决定使用JOOQ看起来很有趣,但是我们找不到留档/示例来创建一个使用默认java生成器行为加上自定义枚举生成扩展的自定义生成器。 基于这篇文章用JOOQ从表中生成枚举类,它带来了一些想法,但仍然不清楚如何实
jOOQ 高效的合并了复杂 SQL、类型安全、源码生成、Active Records、存储过程以及高级数据类型的 Java 类库。 示例代码: // Create a new record and insert it into the databaseTBookRecord book = create.newRecord(T_BOOK);book.setTitle("My first book")
我正在尝试为PGInterval和Duration编写一个自定义数据类型绑定,以将jOOQ与TimescaleDB一起使用。遗憾的是,jOOQ在为数据库例程生成函数时没有使用它。 这是我的绑定类: 这是我在pom中的配置: 例如,我希望jOOQ生成例程 像 但是我得到了
我有一个有许多表的数据库。我想开始使用jOOQ为我的应用程序。但是我不希望JOOQ为所有表生成代码,但只为表的一小部分生成代码。我如何配置它?
对于多个数据库(和数据库服务器),我有完全相同的数据库定义。我如何告诉Jooq使用与我创建的连接到DB的“连接”相同的数据库? 示例(对于MySQL): jdbc:mysql://localhost:3306/tsm-我的开发数据库(tsm),用于生成代码 所有3个数据库都具有相同的定义、相同的表、索引等。TSM one是我们的应用程序使用的标准。 也许我应该使用DSL。使用(连接、设置)而不是?