我们设计数据库的时候要严格遵循3NF设计,比如
举例子:订单表(order),订单商品表(order_goods),一笔订单有多件商品,订单信息保存在订单表,其商品信息保存在商品表,一对多的形式 one to many
订单表
订单商品表
查出订单对应的商品信息,我们的sql是
select o.id, o.name, g.id as gid, g.order_id, g.goods_name
from du_order o inner join du_goods g on o.id = g.order_id
查询出的结果
有的同学遇到这样的问题会先查出order的信息 根据order的id去查goods表,进行两次db(有没有这样的同学?肯定有)
resultMap中的 collection标签为我们很好的解决了这类问题,一次db查出我们想要的结果。
扫描二维码关注公众号,回复: 13085932 查看本文章
接下来使用resultMap的 collection标签简化开发,映射字段
首先定义dto实体,给前端传输数据
public class OrderDto{
private Integer id; // 订单id
private String orderName; // 订单名
private List<Goods> goodsList; // 订单商品信息
// getter setter toString 省略
}
对应的mapper xml 写法
参数详情:
- property 映射的字段,如dto中的goodsList字段
- ofType 类型 映射的类型 如图 goods类型
- 注意(映射时不要有重名字段,如 g.id 与 o.id 重名了,要用 as 起别名,要不无法映射)
运行结果
[OrderDto(id=1, orderName=杜国涛, goodsList=[Goods(id=1, orderId=1, goodsName=雪丸子), Goods(id=2, orderId=1, goodsName=巧克力)])]
总结:简化开发,减少db请求