Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用另一个表的键从myBatis获取地图?_Java_Mybatis - Fatal编程技术网

Java 如何使用另一个表的键从myBatis获取地图?

Java 如何使用另一个表的键从myBatis获取地图?,java,mybatis,Java,Mybatis,我有一个请求,它给了我一个Advantage类对象: <resultMap id="AdvantageResult" type="Advantage"> <id property="id" jdbcType="BIGINT" javaType="java.lang.Long" column="id"/> <resul

我有一个请求,它给了我一个Advantage类对象:

<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>
这是我的请求,我在这里使用地图:

<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,其中长键是param{configDetailId}
我应该如何重写映射器?

我可以想出两种方法

将返回的Advantage转换为Java代码中的Map。 在JavaMapper接口中定义一个简单的默认方法就足够了

优点是内部选择长configDetailId; 默认映射selectLong configDetailId{ 返回Map.ofconfigDetailId,internalSelectconfigDetailId; } 为Advantage添加一个私有字段,该字段保存configDetailId并使用@MapKey

私有长configDetailId; 然后将参数包括到选择和结果映射的列列表中

选择 ,{configDetailId}作为configDetailId 从…起 然后将@MapKey添加到Java映射器接口

@MapKeyconfigDetailId 映射FindVantageByLoyaltandConfigDetailId; @当存在“键”的现有属性时,MapKey非常方便。
否则,我建议使用第一种方法。

如果我想使用List ConfigDetailId,并且集合中的每一个long都应该是键,该怎么办?我知道如何使用where id in,但我不知道如何将其用于设置映射@Маааааааааааааааааа。如果不想修改Advantage,可能必须在默认方法中迭代ConfigDetailID,并一次选择一行。