Flyway
要启用相应功能,请确保项目包含 Flyway 依赖项。
即使没有 Flyway 依赖项, Create Flyway Versioned Migration 操作也可用。
初始化 schema
使用 IntelliJ IDEA ,您可以根据 JPA 实体中提供的映射来初始化数据库架构。
请按 Ctrl+Shift+A 并开始输入 Flyway 初始化迁移。
要基于数据模型生成 DDL 脚本,请选择 模型 并指定相应的持久性单元。

IntelliJ IDEA 提供了一个专门针对所选实体更改创建迁移脚本的选项。 在 范围 列表中,点击 所选实体 ,然后在 选择自定义作用域的实体 窗口中,选择实体。

生成迁移脚本
如果未建立数据库连接, 创建一个。
在 数据库 工具窗口中,右键点击数据库并选择 创建 Flyway 版本化迁移。
在打开的对话框中,选择源(数据模型的期望状态)和目标(数据模型的旧状态)。
您可以在以下源选项之间进行选择:
数据库 :应在您拥有最新数据库并希望生成迁移脚本以将另一个数据库更新到相同状态时使用。
模型 :使用它来生成迁移脚本,以表示当前实体关系模型(JPA 实体)与旧(目标)状态之间的差异。
目标可以设置为:
数据库 :具有较旧架构版本的目标数据库。
快照 :如果您在数据模型快照中存储了所需状态,请使用此选项。 它也可以由 IntelliJ IDEA 生成。

点击 OK。 IntelliJ IDEA 将分析 Source 和 Target 之间的差异,并显示 Flyway Versioned Migration Preview对话框。
请指定文件名和位置,然后点击 保存。
Flyway 版本迁移预览窗口

IntelliJ IDEA 允许您选择存储生成脚本的位置:您可以选择文件、IDE中的临时文件,或剪贴板。
目录 和 文件名 字段负责配置生成的迁移位置。 如果已存在具有指定名称的迁移,您将收到警告提示,之后更改将附加到该迁移。
在窗口的左侧,有一个实际更改的预览。 您可以通过点击查看每个更改的预览。
在更改列表的上方,您可以使用以下按钮:
添加版本化迁移
创建一个次要版本的数据迁移。
从版本化迁移中移除
请移除更改并将它们添加到 已忽略 部分,以便将它们排除在未来的迁移之外。
从忽略状态还原
将更改从 已忽略 移动到迁移中。
移动到其他版本化迁移
默认情况下,每次生成差异时,都会创建一个包含所有更改的迁移脚本。 此操作允许您将更改移动到另一个迁移文件。
显示其他操作
与迁移文件中的大量更改进行交互: 全选、 Expand all 和 收缩全部。
要将多个更改合并到一个迁移文件中或忽略它们,请拖动它们。
Java 迁移
基于 Java 的迁移非常适合无法轻松使用 SQL 表达的所有更改。 这些迁移表示实现 JavaMigration 接口或继承自 BaseJavaMigration 类的 Java 类。 IntelliJ IDEA 采用第二种选项,并根据 Flyway 的默认 命名规范生成类名。 这使得 Flyway 可以自动从类名中提取版本和描述。
要生成 java migration,请在 JPA Structure 选项卡中按加号按钮并选择相应的项。
生成 Java 迁移
在编辑器中打开一个 Java 文件。
请按 Ctrl+Shift+A 并开始输入 Flyway Java 迁移。
在打开的窗口中,设置类名、source root 和包名。

下面将生成以下 Java 类:
如果您已安装并启用了 JPA Buddy 插件,您还可以使用 JPA 资源管理器 工具窗口访问本文中描述的操作。

Flyway 回调函数
虽然迁移对于大多数需求来说已经足够,但在某些情况下,您需要反复执行相同的操作。 借助 IntelliJ IDEA,您可以生成 Flyway 支持的所有事件。
生成 SQL Callback
请按 Ctrl+Shift+A 并开始输入 Flyway SQL 回调。
在打开的窗口中,选择生成文件的源根目录和目录。

在 回调事件 字段中,选择 Flyway 支持的事件之一。

回调还可以选择包含描述。 将 描述 字段的值附加到回调名称中。
生成 Java 回调
在编辑器中打开一个 Java 文件。
请按 Ctrl+Shift+A 并开始输入 Flyway Java 回调。
在打开的窗口中,输入类名和回调名称并选择回调事件。 选择类源根目录和包。
使用 可以在事务中处理 复选框来指定
canHandleInTransaction重写方法应返回 true 还是 false。
Flyway 设置
每当创建空的或差异的 Flyway 迁移时,IntelliJ IDEA 会根据 flyway naming pattern 生成文件名。 在 IDE 设置 (Ctrl+Alt+S )中,您可以配置名称生成的值。

迁移前缀. 默认值为
V。版本模式. 在连字符之后,展示了生成序列的示例。
迁移分隔符. 默认值为“_”。
迁移描述.
以下变量和宏在模板中可用:
#date([format])-指定的 SimpleDateFormat中的当前系统日期。 例如,#date(\"yyyy-MM-dd\")返回格式化为 2020-12-31 的日期。#increment([start], [step], [decimalFormat])— 一个用于保持名称唯一的号码。start值用于第一个文件,并且每个下一个文件都根据 step 递增。decimalFormat参数指定了该数字的 DecimalFormat格式。 例如,#increment(1.0, 0.1, \"#.0\")返回的值格式为 1.1、1.2、1.3 等。semVer——项目的语义版本(又称 SemVer)是一种广泛采用的版本方案,使用三个数字(Major.Minor.Patch)序列、一个可选的预发布标签和一个可选的构建元标签。 该对象包含以下方法(示例中的完整版本为 1.2.3-SNAPSHOT+meta):${semVer.getRawVersion()}:1.2.3-SNAPSHOT${semVer.getMajor()}:1${semVer.getMinor()}:2${semVer.getPatch()}:3${semVer.getPreRelease()}:SNAPSHOT${semVer.getMeta()}:元数据