Mybatis 主子表关联查询
<!--主表映射-->
<resultMap type="MallOrder" id="MallOrderResult">
   <result property="orderNo"    column="order_no"    />
   <result property="memberId"    column="member_id"    />
  <result property="merchantId"    column="merchant_id"    />
......
</resultMap>
<sql id="selectMallOrderVo">
   select order_no, member_id, merchant_id, goods_amount from mall_order
</sql>

1.连接查询方式

<select id="selectMallOrderNestedList" parameterType="MallOrder" resultMap="MallOrderListNestedResult">
select 
    a.id, a.name, a.brand_id, 
    b.id as sub_id
from mall_goods a
        left join mall_goods_sku b on b.goods_id = a.id
where a.id = #{id}
</select>

结果

 <resultMap id="MallOrderListNestedResult" type="MallOrder" extends="MallOrderResult">
        <collection property="children" notNullColumn="sub_id" javaType="java.util.List" resultMap="OrderDetailResult" />
</resultMap>
子表映射
<resultMap type="MallOrderDetail" id="OrderDetailResult">
   <result property="id"    column="sub_id"    />
   <result property="orderId"    column="sub_order_id"    />
   <result property="memberId"    column="sub_member_id"    />
   <result property="merchantId"    column="sub_merchant_id"    />
   <result property="goodsId"    column="sub_goods_id"    />
   <result property="goodsName"    column="sub_goods_name"    />
   <result property="goodsImage"    column="sub_goods_image"    />
</resultMap>

2.子查询方式

执行查询

<select id="selectMallOrderNestedList" resultMap="MallOrderNestedResult" parameterType="MallGoods">
  <include refid="selectMallOrderVo"/>
 <where></where>
</select>
<!--增加主表包含详情集合的映射-->
<resultMap type="MallOrder" id="MallOrderNestedResult" extends="MallOrderResult">
    <collection property="children" select="selectDetailsByOrderNo" column="order_no"/>
</resultMap>
<!--子表映射-->
<resultMap type="MallOrderDetail" id="OrderDetailResult">
   <result property="id"    column="id"    />
   <result property="orderId"    column="order_id"    />
   <result property="memberId"    column="member_id"    />
   <result property="merchantId"    column="merchant_id"    />
   <result property="goodsId"    column="goods_id"    />
   <result property="goodsName"    column="goods_name"    />
   <result property="goodsImage"    column="goods_image"    />

</resultMap>

使用selectDetailsByOrderNo 指向一个新查询去填充子集

<select id="selectDetailsByOrderNo" resultType="com.join.mall.domain.MallOrderDetail" resultMap="OrderDetailResult">
        SELECT * from mall_order_detail where order_no = #{order_no}
</select>
上一篇
下一篇