data transform object数据传输对象。
完整订单,可能存在同一个订单号,多个订单详情。
那么可以在订单实体中加入 一个订单详情的属性。但是该订单详情属性,并不存在于数据库中。会报错。加入注解@TranTransient,可以避免实体与数据对应不上的问题。
但是这样存在一个问题:某个类对应数据库中的字段,另一方面提供给外部,如Controller,使用,显得有点乱。
解决方案:创建一个dto(data transform object 数据传输对象 ), 专门在各个层中传输使用。此类的属性,包含order中所有属性,且包括一个List<OrderDetail> orderDetailList;属性,初始值可以不设定。
对象和对象之间涉及的转化为:
@Data
public class OrderDTO {
/**订单id. */
@Id
private String orderId;
/**买家名称. */
private String buyerName;
/**买家手机号. */
private String buyerPhone;
/**买家地址. */
private String buyerAddress;
/**买家微信openId. */
private String buyerOpenid;
/**订单总金额. */
private BigDecimal orderAmount;
/**订单状态,默认为0 新下单. */
private Integer orderStatus;
/**支付状态,默认为0 未支付 */
private Integer payStatus;
/**创建时间. */
private Date createTime;
/**更新时间. */
private Date updateTime;
List<OrderDetail> orderDetailList;
@JsonIgnore
public OrderStatusEnum getOrderStatusEnum(){
return EnumUtil.getByCode(orderStatus,OrderStatusEnum.class);
}
@JsonIgnore
public PayStatusEnum getPayStatusEnum(){
return EnumUtil.getByCode(payStatus,PayStatusEnum.class);
}
}
这样dto对象中包含了order表和orderdetail表中的必要信息。