带有转换器的 jOOQ .fetchMap()

jOOQ .fetchMap() with Converters

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

文档对如何使用转换器和如何使用 .fetchMap() 非常清楚,但我无法在任何地方找到结合两者的方法。

我的 jOOQ 版本 (3.9) 会缺少此功能吗?

Converter (and Binding) implementations are bound to the 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);

现在,每当您在 SELECT 语句中获取此 field 时,例如

Result<Record1<MyType>> result =
DSL.using(configuration)
   .select(field)
   .from(...)
   .fetch();

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

ResultQuery.fetchMap(Field, Field) method that you've mentioned is just short for fetch() and then Result.intoMap(Field, Field)。换句话说,当您调用 fetchMap()intoMap() 时转换器已经自动应用,因此无需执行任何特定操作。只需将您的字段用作 fetchMap() :

的参数
Map<MyType, OtherType> result =
DSL.using(configuration)
   .select(field, otherField)
   .from(...)
   .fetchMap(field, otherField);