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;
}