簡體   English   中英

如何使用另一個表的鍵從 myBatis 獲取 Map?

[英]How to get Map from myBatis with a key of another table?

我有一個請求,它給了我一個 object 的優勢 class:

<resultMap id="AdvantageResult" type="Advantage">
        <id property="id" jdbcType="BIGINT" javaType="java.lang.Long" column="id"/>
        <result property="code" column="code"/>
        <result property="name" column="name"/>
        <result property="description" column="description"/>
        <result property="asIs" column="as_is"/>
        <result property="toBe" column="to_be"/>
        <result property="availableName" column="available_name"/>
        <result property="availableNameShort" column="available_name_short"/>
        <result property="availableDescription" column="available_description"/>
        <result property="availableDescriptionShort" column="available_description_short"/>
        <result property="activeName" column="active_name"/>
        <result property="activeNameShort" column="active_name_short"/>
        <result property="activeDescription" column="active_description"/>
        <result property="activeDescriptionShort" column="active_description_short"/>
    </resultMap>

這是我的請求,我使用 map:

<select id="findAdvantageByLoyaltyAndConfigDetailId" resultMap="AdvantageResult">
        select  a.id, a.code, a.name, a.description, a.as_is, a.to_be,
                a.available_name, a.available_name_short, a.available_description, a.available_description_short,
                a.active_name, a.active_name_short,  a.active_description, a.active_description_short
        from advantage a
                 left join detail_advantage da on da.advantage_id = a.id
        where da.config_detail_id = #{configDetailId}
    </select>

我想獲取 Map <Long, Advantage>,其中長鍵將是參數 #{configDetailId} 我應該如何重寫映射器?

我可以想到兩種方法。

  1. 將返回的Advantage轉換為Map代碼中的 Map。
    在 Java 映射器接口中定義一個簡單的默認方法就足夠了。

     Advantage internalSelect(Long configDetailId); default Map<Long, Advantage> select(Long configDetailId) { return Map.of(configDetailId, internalSelect(configDetailId)); }
  2. Advantage添加一個包含configDetailId並使用@MapKey的私有字段。

     private Long configDetailId;

    然后將參數包含到 select 和結果 map 的列列表中。

     select... , #{configDetailId} as configDetailId from...
     <result property="configDetailId" column="configDetailId" />

    然后將@MapKey添加到您的 Java 映射器接口。

     @MapKey("configDetailId") Map<Long, Advantage> findAdvantageByLoyaltyAndConfigDetailId(Long configDetailId);

當“鍵”存在現有屬性時, @MapKey很方便。
否則,我會推薦第一種方法。

暫無
暫無

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

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