如何使用另一个 table 的键从 myBatis 获取 Map?
How to get Map from myBatis with a key of another table?
我有一个请求,它给了我一个 Advantage 对象 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>
这是我的请求,我在哪里使用地图:
<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 ,其中长键将是参数 #{configDetailId}
我应该如何重写映射器?
我可以想到两种方法。
在Java代码中将返回的Advantage
转换为Map
。
在 Java 映射器接口中定义一个简单的默认方法就足够了。
Advantage internalSelect(Long configDetailId);
default Map<Long, Advantage> select(Long configDetailId) {
return Map.of(configDetailId, internalSelect(configDetailId));
}
向 Advantage
添加一个包含 configDetailId
的私有字段并使用 @MapKey
.
private Long configDetailId;
然后将参数包含到select的列列表和结果映射中。
select ...
, #{configDetailId} as configDetailId
from ...
<result property="configDetailId" column="configDetailId" />
然后将 @MapKey
添加到您的 Java 映射器界面。
@MapKey("configDetailId")
Map<Long, Advantage> findAdvantageByLoyaltyAndConfigDetailId(Long configDetailId);
@MapKey
在 'key'.
存在 属性 时很方便
否则,我会推荐第一种方法。
我有一个请求,它给了我一个 Advantage 对象 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>
这是我的请求,我在哪里使用地图:
<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
我可以想到两种方法。
在Java代码中将返回的
Advantage
转换为Map
。
在 Java 映射器接口中定义一个简单的默认方法就足够了。Advantage internalSelect(Long configDetailId); default Map<Long, Advantage> select(Long configDetailId) { return Map.of(configDetailId, internalSelect(configDetailId)); }
向
Advantage
添加一个包含configDetailId
的私有字段并使用@MapKey
.private Long configDetailId;
然后将参数包含到select的列列表和结果映射中。
select ... , #{configDetailId} as configDetailId from ...
<result property="configDetailId" column="configDetailId" />
然后将
@MapKey
添加到您的 Java 映射器界面。@MapKey("configDetailId") Map<Long, Advantage> findAdvantageByLoyaltyAndConfigDetailId(Long configDetailId);
@MapKey
在 'key'.
存在 属性 时很方便
否则,我会推荐第一种方法。