mybatis一对一 和 一对多 嵌套查询

时间:2022-06-29 07:06:19

实际项目中的,接口对外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 返回直接没有该属性

mybatis一对一 和 一对多 嵌套查询