为了账号安全,请及时绑定邮箱和手机立即绑定
关注
qq_龍aiq飛_0

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

场景
订单表,订单详情表
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有没有更优雅的方式?

2020-01-17 源自:MyBatis-Plus入门 7-1 342 浏览 2 回答

最佳回答

2020-01-19

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

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

回复 1

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

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

2020-01-19
回复 1

qq_龍aiq飛_0 (提问者)

查询 OrderMaster 的时候,实体对象里有订单商品列表的对象。 现在我是 查到主表以后再根据主表字段 再查询一次详情表的列表 这应该不算子查询了吧。 估计是我描述有问题,误导老师了
#1 2020-01-19 回复

老猿 回复 qq_龍aiq飛_0

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

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信