我们有时候查询需要一带多,多带一的信息,举个一对多的例子:我们要查询所有的订单,顺便还能把对应的订单里面的多条详情(比如对应的商品,商品价格等)也带出来。
类似于这样
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的标签学习