我正在使用jOOQ,我不太確定我是否按照我應該的方式使用它。我想知道下面的代碼是否可以寫得更優雅。由「優雅地」我的意思是,這是相當煩人的基本上關於任何關於列。如果我添加,刪除或更改列的順序,我將不得不更改所有結果和對象等。我相當肯定,在未來我會遇到類似於以下幾次的請求,因此我希望知道我能否簡化這一點。這個提取可以做得更「優雅」嗎?
另外,我注意到on.fetch()
和類似的結果是Result<Record6<..>>
。我看了看那些RecordX
類。其中有22個。我不認爲我會永遠需要這個,但如果我想讀23列?
public List<StoreItemDTO> getItems(Long storeId) {
// Get all item_ids for the store
SelectConditionStep<Record1<Long>> where = this.ctx
.select(STORE_ITEM.ID)
.from(STORE_ITEM)
.where(STORE_ITEM.STORE_ID.eq(storeId));
// Get all store_item_details (all languages) according to the fetched item_ids
Table<Record5<Long, Long, String, String, Long>> storeItemDetails = this.ctx
.select(
STORE_ITEM_DETAILS.ID,
STORE_ITEM_DETAILS.STORE_ITEM_ID,
STORE_ITEM_DETAILS.NAME,
STORE_ITEM_DETAILS.DESCRIPTION,
STORE_ITEM_DETAILS.STORE_LANGUAGE_ID
)
.from(STORE_ITEM_DETAILS)
.where(STORE_ITEM_DETAILS.STORE_ITEM_ID.in(where))
.asTable("storeItemDetails");
// Join the result and get the items for the store in all languages
SelectOnConditionStep<Record6<Long, Long, Long, String, String, Long>> on = this.ctx
.select(
STORE_ITEM.ID,
STORE_ITEM.STORE_ID,
storeItemDetails.field(STORE_ITEM_DETAILS.ID),
storeItemDetails.field(STORE_ITEM_DETAILS.NAME),
storeItemDetails.field(STORE_ITEM_DETAILS.DESCRIPTION),
storeItemDetails.field(STORE_ITEM_DETAILS.STORE_LANGUAGE_ID)
)
.from(STORE_ITEM)
.join(storeItemDetails)
.on(storeItemDetails.field(STORE_ITEM_DETAILS.STORE_ITEM_ID).eq(STORE_ITEM.ID));
Result<Record6<Long, Long, Long, String, String, Long>> fetch = on.fetch();
// ..
return null;
}
'fetchMaps()'那麼你可以通過列名訪問? [http://www.jooq.org/doc/2.5/manual/sql-execution/fetching/](http://www.jooq.org/doc/2.5/manual/sql-execution/fetching/) – Valijon
@ Valijon我猜這可能是'fetch()'的替代方案。 – displayname