jOOQ .fetchMap() 与转换器

Ped*_*ges 2 java dictionary converters jooq

我正在尝试使用 jOOQ 执行 .fetchMap(key, value) 但我想通过自定义转换器处理密钥。

文档非常清楚如何使用转换器以及如何使用 .fetchMap() 但我在任何地方都找不到将两者结合起来的方法。

我的 jOOQ 版本 (3.9) 是否缺少此功能?

Luk*_*der 5

Converter( 和Binding) 实现绑定到Field代码生成器的引用,或者您可以像这样手动执行:

// Using this static import
import static org.jooq.impl.DSL.*;

// Assuming a VARCHAR column in the database:
DataType<MyType> type = SQLDataType.VARCHAR.asConvertedDataType(
    new MyConverter<String, MyType>());
Field<MyType> field = field(name("MY_TABLE", "MY_FIELD"), type);
Run Code Online (Sandbox Code Playgroud)

现在,每当您fieldSELECT语句中获取此内容时,例如

Result<Record1<MyType>> result =
DSL.using(configuration)
   .select(field)
   .from(...)
   .fetch();
Run Code Online (Sandbox Code Playgroud)

jOOQ 将在从底层 JDBC 获取结果时自动应用您的转换器ResultSetString您永远不会在结果中看到原始值。

您提到的方法ResultQuery.fetchMap(Field, Field)只是fetch()and then的缩写Result.intoMap(Field, Field)。换句话说,当您调用fetchMap()或时,转换器已经被自动应用intoMap(),因此无需执行任何特定操作。只需使用您的字段作为参数即可fetchMap()

Map<MyType, OtherType> result =
DSL.using(configuration)
   .select(field, otherField)
   .from(...)
   .fetchMap(field, otherField);
Run Code Online (Sandbox Code Playgroud)