MP的子列表查询怎么实现的?没看见老师给例子

来源:7-1 通用service

qq_龍aiq飛_0

2020-01-17 13:55

场景
订单表,订单详情表
Controller 查询订单,订单信息里包含购买商品信息

@Data
public class OrderMaster {
    @TableId(type = IdType.AUTO)
    private  Integer orderId;
    private  String buyerName;
    private  String buyerPhone;
    private  String buyerAddress;
    private  String buyerOpenid;
    private BigDecimal orderAmount;
    private Integer orderStatus = OrderStatusEnum.NEW.getCode();
    private  Integer payStatus = PayStatusEnum.WAIT.getCode();
    @TableField( fill = FieldFill.INSERT)// 新增执行
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
    private Date updateTime;
    private transient List<OrderDetail> orderDetailList;
}
@Data
public class OrderDetail {
    @TableId(type = IdType.AUTO)
    private  Integer detailId;
    private  Integer orderId;
    private  Integer productId;
    private  String productName;
    private  BigDecimal productPrice;
    private  Integer productQuantity;
    private  String productIcon;
    @TableField( fill = FieldFill.INSERT)// 新增执行
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
    private Date updateTime;

}


查询的时候MP 不能自动处理么?
百度搜到的都是mybatis的处理方法,不知道MP有没有更优雅的方式?

写回答 关注

2回答

  • 老猿
    2020-01-19 14:00:03
    已采纳

          我再重发一遍,刚才在你下面留言,不知道为啥被截断了。这不是子查询,MP应该是解决不了这个问题,我的办法就是使用OrderMaster的Mapper先查询OrderMaster。然后用OrderDetail的Mapper根据主表的主键查询从表数据,最后把从表数据赋值到OrderMaster对象上。就是两次查询。

           还有个办法就是用mybatis原生的resultMap中配置collection的这种方式。

  • 老猿
    2020-01-19 09:28:50

         MP主要是简化单表操作的,如果包含子查询的话,可以用原生mybatis的写法。

         但是有一些包含子查询的sql使用MP也是可以写出来了,你能具体贴出来你想要的包含子查询的sql语句吗?我看看用MP能不能优雅的写出来。

    老猿 回复qq_龍ai...

    这不是子查询,MP应该是解决不了这个问题,我的办法就是使用OrderMaster的Mapper先查询OrderMaster,然后根据主表的主键orderId字段查从表,之后把查到的从表的数据赋值到OrderMaster对象中。或者你可以使用mybatis原生的在xml中的resultMap中配置collection的这种方式。

    2020-01-19 13:28:36

    共 2 条回复 >

MyBatis-Plus入门

MyBatis-Plus框架入门必学课程!

56140 学习 · 381 问题

查看课程

相似问题