模型转换

DO对象描述

DO对象作为整个开发数据流基础对象,肩负着最终持久化到数据库的责任,同时,DO对象通过Repository、Service、Controller层之后,为前端显示VO对象提供数据来源

1、主键策略

逻辑主键要求

  • macula开发平台要求DO对象以逻辑主键的方式定义主键,这样能保证JPA能正常处理数据,以及在数据发生关联时,不至于修改了业务主键后,更新大量的关联表。

主键类型定义为Long

  • 在无特殊要求的情况下,尽量将主键定义为Long型,并继承AbstractAuditable

主键关联与映射

  • 在DO对象中,需要使用关联时,使用主键关联,并将主键映射为相应的数据库字段,注意保证主键的长度,以适应业务需求量的变化。

2、数据审计

针对业务中,大量出现的需要记录数据最后变更人和变更时间的需求,这里DO对象通过直接继承AbstractAuditable,同时给DO对象添加注解@EntityListeners(AuditingEntityListener.class)的方式,实现变化日志的自动记录。

在使用AbstractAuditable是,需要注意映射表字段的关系:

  • createdBy:创建人,通常只在数据新增时写入,映射字段为CREATED_BY,该字段一般情况下不能修改,记录数据创建人。
  • createdDate:创建时间,与createBy相同,映射字段为CREATED_DATE,记录数据创建时间。
  • lastModifiedBy:最后更新人,通常在数据新增和修改时变化,映射字段为LAST_MODIFIED_BY,记录数据最后更新人。
  • lastModifiedDate:最后更新时间,与lastModifiedBy相同,映射字段为LAST_MODIFIED_DATE,用来记录数据最后更新时间。

DO对象例子

@Data
@Entity
@Table(name = "mb_gateway_keyauth")
@EqualsAndHashCode(of = "keyValue", callSuper = false)
@EntityListeners(AuditingEntityListener.class)
public class GatewayApisKeyauthEntity extends AbstractAuditable<Long> {
    @Column(nullable = false)
    private String keyValue;
    @ManyToOne
    @JoinColumn(name = "consumer_id", nullable = false)
    private GatewayConsumerEntity consumer;
    @JsonIgnore
    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "apisKeyauth")
    private Set<GatewayApisKeyauthRouteEntity> apisKeyauthRoutes = new LinkedHashSet<>();
}

DO与数据库交互

MACULA框架以JPA作为持久层框架,以框架MaculaSimpleJpaRepository作为持久层实现基类,支持JPA持久层接口以及自定义实现持久接口。