Mybatis一对多,多对一嵌套查询的返回

我们有时候查询需要一带多,多带一的信息,举个一对多的例子:我们要查询所有的订单,顺便还能把对应的订单里面的多条详情(比如对应的商品,商品价格等)也带出来。

类似于这样

orderNo,
orderTime,
orderDetailList
                       [
                          {
                              orderDetailId,
                              skuid,
                              skuName,
                              count,
                              price,
                              amount
                          }
                        ..................
                       ],
totalAmount

我们查出来很容易,按照最细粒度查询,但是我们的DO,DTO接收是一个问题,如何能让返回的详情

比如我查询3个订单,返回的详情是5个
在这里插入图片描述
一对多的其实我们可以通过设置Mapper以及对应的文件,
这里面涉及到的关键词是collection

这样我们返回的对象信息是一对多嵌套的,而不是查一遍订单再去查一遍详情,然后在去匹配,SQL只执行一次,而且不会涉及到排序查找匹配的问题。

Mybatis结果标签 一对多:collection

还是那个上面那个订单的例子
我们如何把详情连带这订单信息返回个我们的接收对象

首先我们要设计两个对象:订单对象(里面要有详情detailList)和详情对象

@Data
public class Order{
   private String orderNo;
   private Date orderTime;
   private Bigdecimal totalAmount;
   private List<OrderDetail> detailList;
}


@Data
public class OrderDetail{
   private Long orderDetailId;
   private Long skuId;
   private String skuName;
   private Integer count;
    private Bigdecimal amount;
    private Bigdecimal price;
}

Mapper配置文件

<resultMap id="RESULT_MAP" type="com.xxx.Order">
    <result column="order_no" jdbcType="BIGINT" property="orderNo" />
    <result column="order_time" jdbcType="TIMESTAMP" property="orderTime" />
    <result column="total_amount" jdbcType="BIGDECIMAL " property="totalAmount" />
    <collection property="detailList" ofType="com.xxx.OrderDetail">
        <id column="order_detail_id" jdbcType="BIGINT" property="orderDetailId" />
        <result column="sku_id" jdbcType="BIGINT" property="skuId" />
       .............
    </collection>
</resultMap>

当然了,这个是可以拆开的,这个可以拆开成2个,订单一个订单详情一个,我比较喜欢拆开的
拆开的写法

<resultMap id="RESULT_MAP" type="com.xxx.Order">
    <result column="order_no" jdbcType="BIGINT" property="orderNo" />
    <result column="order_time" jdbcType="TIMESTAMP" property="orderTime" />
    <result column="total_amount" jdbcType="BIGDECIMAL " property="totalAmount" />
    <collection property="detailList" resultMap="BorrowOrderDetailDO"/>
</resultMap>

<resultMap id="BorrowOrderDetailDO" type="com.xxx.OrderDetail">
     <id column="order_detail_id" jdbcType="BIGINT" property="orderDetailId" />
        <result column="sku_id" jdbcType="BIGINT" property="skuId" />
       .............
</resultMap>

Mybatis结果标签 一对多:association

和上面的类似,查订单详情里面需要订单的信息,反过来

下面是一个mybatis的标签学习地址
mybatis的标签学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值