场景
订单表,订单详情表
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有没有更优雅的方式?
我再重发一遍,刚才在你下面留言,不知道为啥被截断了。这不是子查询,MP应该是解决不了这个问题,我的办法就是使用OrderMaster的Mapper先查询OrderMaster。然后用OrderDetail的Mapper根据主表的主键查询从表数据,最后把从表数据赋值到OrderMaster对象上。就是两次查询。
还有个办法就是用mybatis原生的resultMap中配置collection的这种方式。
MP主要是简化单表操作的,如果包含子查询的话,可以用原生mybatis的写法。
但是有一些包含子查询的sql使用MP也是可以写出来了,你能具体贴出来你想要的包含子查询的sql语句吗?我看看用MP能不能优雅的写出来。