我们正在使用MyBatis进行我正在进行的项目之一。我在尝试使用resultMap获取结果时遇到问题。
mapper.xml
<resultMap id="BaseResultMap" type="com.mycompany.myproduct.dto.ChannelMap">
<id column="CHNL_MAP_ID" property="chnlMapId" jdbcType="DECIMAL" />
<result column="CHNL_MAP_NM" property="chnlMapNm" jdbcType="VARCHAR" />
<association property="ctnDlvryPltf"
resultMap="com.mycompany.myproduct.mapper.ContentDelvryPltfrmMapper.BaseResultMap" />
<association property="ctnDtr"
resultMap="com.mycompany.myproduct.mapper.ContentDistributorMapper.BaseResultMap" />
<association property="region"
resultMap="com.mycompany.myproduct.mapper.RegionMapper.BaseResultMap" />
</resultMap>
<sql id="Value_Columns_List">
cmap.CHNL_MAP_NM, cdp.CTN_DLVRY_PLTF_NM,
cdp.CTN_DLVRY_PLTF_TYP_NM, cdp.CTN_DTR_NM, cd.CTN_DTR_NM,
cmap.RGN_ID, cmap.CNTRY_ID
</sql>
<select id="select" resultMap="BaseResultMap">
select
<include refid="Value_Columns_List" />
FROM
channel_map cmap,
(SELECT
cdpl.ctn_dlvry_pltf_id,cdpl.ctn_dlvry_pltf_nm,
cdplt.ctn_dlvry_pltf_typ_nm ,cds.ctn_dtr_nm FROM
content_delvry_pltfrm
cdpl,
content_delvry_pltfrm_typ cdplt,
content_distributor cds
WHERE
cdpl.ctn_dlvry_pltf_typ_id =
cdplt.ctn_dlvry_pltf_typ_id AND
cdpl.ctn_dtr_id = cds.ctn_dtr_id)
cdp,
content_distributor
cd
WHERE
cmap.ctn_dlvry_pltf_id = cdp.ctn_dlvry_pltf_id AND
cmap.ctn_dtr_id = cd.ctn_dtr_id
</select>
上述文件中需要注意的重要事项是,我们通过不同的别名在select查询中两次获取名为CTN_DTR_NM的列(请参阅Value_Columns_List)。这是因为channel_map表包含CTN_DTR_NM。通道映射表还包含对另一个包含CTN_DTR_NM的表的引用。
我面临的问题是即使channel_map表包含多行,select方法也会返回一个只包含一行的List。检查MyBatis日志显示实际查询获取了多行,所有获取的行都显示在日志中。我觉得这个问题与MyBatis提取的结果集映射到我的POJO的方式有关。
答案 0 :(得分:0)
就使用chnlMapId属性的id标记而言,您要阻止mybatis生成多个具有相同chnlMapId值的对象。 ¿您是否尝试使用结果标记代替chnlMapId属性的id标记?