实际项目中的,接口对外VO 会出现 一对一 和 一对多的情况,举例:小区 下面有 楼栋 ,楼栋 下面有 房屋 , 房屋里面又房间
小区Vo : districtVo {
id;
name;
List<buildVo> builds
}
楼栋Vo :buildVo{
id;
name;
did;
List<apartmentVo> apartments
}
房屋Vo :apartmentVo{
id;
name;
List<RoomVo>
} ..........
对外接口中 有个接口查询所有得小区 列表
推荐方法
<select id = "getList" resultMap = "resultList">
select id , name
fomr
<select >
<resultMap id="resultList" type="****.districtVo">
<collection property="builds" column="{id=id}" select="getbuids"></collection> //此处collection 集合方式 column 必须对应getlist 查出列 ,mybatis 总动从sql 语句中拿出对应列匹配column 传递到下一个select 语句中此处的select语句也可以写在collection中
</resultMap>
<select id="getbuids" resultType="****.buildVo">
select
d.id as id,
d.name as name,
from t_build d
where d.did = #{id,jdbcType=VARCHAR}
</select>
一对多的一种写法
如果想嵌套三层 在 查出 distict list 中 的buid 里面能有 apartment的信息 在 getbuids 中 再定义一个resultMap 然后再嵌套一次。 mybatis 一对多情况还是比较好理解 ,了解清楚 <collection></collection> 中每个标签的意思
第二种映射关系 此处尽量返回自己vo ,返回map 类型 有些列数据为空的时候 map 返回直接没有该属性