MyBatis 查询结果中带集合

需求:
我们需要查询一个对象,对象中有一个list集合(如一个组织对应多个团队,一个团队对应多个队员);
类似如此:

组织:
	组织名
	组织ID
	团队[
		{
			团队名
			团队ID
			队员[
				{
					队员名
					队员ID
				},
				{
					队员名
					队员ID
				}
			]
		},
		{
			团队名
			团队ID
			队员[
				{
					队员名
					队员ID
				},
				{
					队员名
					队员ID
				}
			]
		}
	]

写法:

我们可以在查询的时候使用:resultMap 手动设置映射关系。

<resultMap id="组织映射关系" type="com.xxxx.xxxx.xxxx.组织">
    <id property="组织ID" column="组织ID" jdbcType="VARCHAR"/>
    <result property="组织名" column="组织名" jdbcType="VARCHAR"/>
    <collection property="团队" resultMap="团队映射关系"/>
</resultMap>

<resultMap id="团队映射关系" type="com.xxxx.xxxx.xxxx.团队">  
    <result property="团队ID" column="团队ID" jdbcType="VARCHAR"/>  
    <result property="团队名" column="团队名" jdbcType="VARCHAR"/>  
    <collection property="队员" ofType="com.xxxx.xxxx.xxxx.队员">  
        <result property="队员ID" column="队员ID" jdbcType="VARCHAR"/>  
        <result property="队员名" column="队员名" jdbcType="VARCHAR"/>  
    </collection>  
</resultMap>


<select id="查询组织" resultMap="组织映射关系">
	select 
		组织名
		,组织ID
		,团队名
		,团队ID
		,队员名
		,队员ID
	from 组织 a 
	left join 团队 b on a.组织ID = b.组织ID
	left join 队员 c on b.团队ID = c.团队ID
</select>

解释(注意事项):

在Mapper的xml文件里我们正常写SQL。
使用<resultMap> 标签手动设置映射关系。
一个<resultMap>标签里只能嵌套一个<collection>如果有多个<collection>可以使用<collection property="团队" resultMap="团队映射关系"/>来引用外部标签。其中resultMap属性来指示嵌套的<collection>标签的位置。

posted @ 2024-01-08 13:54  20231012  阅读(342)  评论(0)    收藏  举报