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>标签的位置。

浙公网安备 33010602011771号