带有转换器的 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);
我正在尝试使用 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);