簡體   English   中英

使用 JOOQ 中的 RecordMapper 將派生列映射到 POJO

[英]Mapping derived columns to POJOs with RecordMapper in JOOQ

我有一個表格票證,我在其中插入票證,並有一個字段 createdBy 存儲該記錄創建者的 UserId Integer。 在獲取期間,我加入了用戶表並連接了名字和姓氏,我的 DTO 具有連接創建者名稱的字段 createdBy。 如何映射派生字段? 這是我的參考https://www.jooq.org/doc/3.13/manual/sql-execution/fetching/pojos/我似乎找不到提供這樣的場景

問題不在於加入。 問題是映射連接后派生的字符串 createdBy 而在由 jooq 生成的記錄類中是一個整數,因為在數據庫表中我存儲了 userId。

    List<MyTickets> mytickets = create.select(....FIELDS).from(TICKETS_).fetch().into(MyTickets.class);
    @Override
public Field<Integer> field9() {
    return Tickets.TICKETS_.CREATEDBY;
}

在我的回答中,我將假設您的計算列將被稱為CREATED_BY_NAME ,而不是CREATED_BY ,這是一個已經被采用的名稱,以避免混淆。

如果這是您經常做的事情,那么您有幾個可能對您感興趣的選項:

  • 使用視圖生成此替代CREATED_BY_NAME列。 許多數據庫也可以插入/更新視圖,因此在使用視圖替換表時不會有很大的損失。 對於您的客戶端邏輯,此列的來源將是透明的。 如果您想使用UpdatableRecord ,您必須使用合成主鍵標志告訴 jOOQ 的代碼生成器視圖的底層主鍵是什么。
  • 與上述視圖類似,您可以在表上使用計算列,使用GENERATED ALWAYS AS ...語法(或您的方言用於該語法的任何內容)。 並非所有方言都支持這一點,但這是一個很好的功能,無需額外的視圖對象即可將表轉換為視圖。
  • 如果您想在 jOOQ 代碼中手動計算此列,您可以編寫自己的 DTO/POJO 對象,或者使用自定義代碼部分擴展代碼生成器,在其中生成相關的屬性/getter/setter。 這種方法僅適用於可變 POJO,因為您無法修改不可變 POJO 的構造函數。
  • 您還可以為所有受影響的 POJO 指定一個基類,並使用生成器策略( 編程配置)注入該基類。 然后,基類可以為CREATED_BY_NAME列實現所有 getter/setter。
  • 您也可以改用結構類型。 您不必將所有列都映射到您的 POJO。 您還可以將一些列映射到生成的 POJO(不包括CREATED_BY_NAME )並分別映射CREATED_BY_NAME列。 只需保留對 jOOQ Result和/或Record的引用,並對其執行多個 map / intoXYZ()調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM