springboot学习第6期 - flyway

64 阅读1分钟

flyway 记录了 sql 的版本记录。

引入依赖

<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
</dependency>
<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-mysql</artifactId> <!-- 如果用 MySQL -->
</dependency>

配置

可以零配置使用

创建sql

sql文件统一存放在 resource 目录下的 db/migration 目录里面。

sql 文件有命名规则:V版本__描述.sql (双下划线)

CREATE TABLE tbl_user (
    -- 主键自增
    id            bigint unsigned auto_increment primary key,

    -- 业务字段
    username      varchar(128)  not null unique,
    password      varchar(128)  not null,

    -- 逻辑删除
    is_deleted   tinyint(1) unsigned not null default 0,

    -- 审计字段
    created_at   datetime not null default current_timestamp,
    updated_at   datetime not null default current_timestamp on update current_timestamp,

    -- 审计字段(可选)
    created_by  varchar(50)  not null default 'system',
    updated_by  varchar(50)  not null default 'system'
);

然后启动服务,就会自动创建。

创建对象与数据表对应

以 spring data jpa 为例

可以将审计字段解耦出来:

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)  // 并且主类添加 @EnableJpaAuditing
@SoftDelete(columnName = "is_deleted")
public abstract class AuditableEntity {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;

    @CreatedBy
    private String createdBy;

    @LastModifiedBy
    private String updatedBy;
}

然后继承这个类:

@Entity
@Getter
@Setter
@Table(name = "tbl_user")
public class UserDo extends AuditableEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String passwordHash;

    private String email;
}