2017-04-13 175 views
1

我試圖用jOOQ執行.fetchMap(鍵,值),但我想通過自定義轉換器來處理鍵。jOOQ .fetchMap()與轉換器

該文檔非常清楚如何使用轉換器以及如何使用.fetchMap(),但我找不到任何方法來結合兩者。

從我的jOOQ版本(3.9)中可以找不到此功能?

回答

2

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); 

現在,每當你取這個fieldSELECT語句,例如而從獲取底層JDBC ResultSet結果

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

jOOQ會自動套用您的轉換器。你永遠不會在結果中看到原始的String值。

您提到的ResultQuery.fetchMap(Field, Field)方法只是fetch()Result.intoMap(Field, Field)的簡稱。換句話說,轉換器將在您撥打fetchMap()intoMap()時自動應用,因此無需執行任何特定操作。只需使用你的領域作爲參數傳遞給fetchMap()

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

你可以提供一些線索什麼方法/在''領域被使用的功能(名稱(「MY_TABLE」,「MY_FIELD」),型)''?什麼是field()和name()? – awm

+0

@awm:當然,我將隱含的靜態導入添加到答案中 –