Liquibase
在 IntelliJ IDEA 2024.1 版本之前,部分 Liquibase 功能仅可通过 JPA Buddy 插件 使用。 下方视频演示了这些现在可以通过 Liquibase 插件使用的功能。
要启用相应功能,请确保项目包含 Liquibase 依赖项。 它还提供了一系列操作,可以快速生成更改日志、运行它们、预览 SQL 语句等。
初始化架构
使用 IntelliJ IDEA,您可以根据 JPA 实体中提供的映射初始化数据库架构。 它将为您当前的实体生成一组 DDL 命令,以 Liquibase 更改日志 的形式呈现。
按 Ctrl+Shift+A ,开始输入 Liquibase 初始化架构。
您还可以打开一个 Liquibase 更改日志 文件,按 Alt+Insert ,然后选择 Liquibase 初始化架构。 在这种情况下,打开的文件参数将用于 更新日志预览窗口。
要基于数据模型生成 DDL 脚本,请选择 模型 并指定相应的持久化单元。

IntelliJ IDEA 提供选项,可专门为所选实体中的更改创建迁移脚本。 在 范围 列表中,点击 所选实体 ,并在 选择自定义作用域的实体 窗口中选择实体。

更新日志预览窗口

如果您希望将变更日志保存为常规文件,则可使用以下配置选项:
目录 和 文件名 字段负责配置生成的更改日志的位置。 如果已存在具有指定名称的更改日志,您将收到一个警告提示,然后更改将被追加到该更改日志中。
您可以使用 包含到、 包含文件夹 和 包含上下文 来指定是否应在另一个 更改日志 中包含变更日志。 如果您勾选 包含文件夹 框,它会生成整个文件夹的 include 语句,而不仅仅是当前的 更改日志。
从 文件类型 下拉列表中,您可以选择 Liquibase 支持的四种文件类型之一(YAML、JSON、SQL、XML),IntelliJ IDEA 将在这些文件中生成变更日志。
如果您希望将变更日志保存为临时文件,那么您只能配置其名称和类型。

窗口的左侧显示将生成的更改集预览。 您可以点击每个更改以查看其外观。 要将多个更改合并到一个更改集中或忽略它们,只需拖放即可。 预览窗口的左上角包含各种用于修改最终变更日志的操作:

提供以下操作:
添加更新日志 — 创建次要更新日志
添加变更集 — 在选定的更改日志中创建一个新的更改集
从更改日志中移除 具有以下选项:
从更改日志中移除 — 只需从当前变更日志中删除更改
移除并忽略 — 移除这些更改并将其添加到 已忽略 ,这样它们也可以从未来的变更集中排除
从忽略状态还原 — 将更改从 已忽略 移动到更改日志
设置上下文 (用于变更集)
设置标签 (用于变更集)
显示其他操作 — 根据危险等级选择所有更改,展开/折叠所有更改
创建空变更日志
在 项目 工具窗口中,右键点击 db/changelog 目录。
选择 新建 (或按 Alt+Insert )并选择 Liquibase 空更新日志。

在打开的 新建 Liquibase 更新日志 对话框中,选择 XML 或 YAML 格式的变更日志文件。
这将基于 Liquibase 文件模板创建一个新文件。 您可以在 IDE 设置(Ctrl+Alt+S )中的 下查看所有可用的文件模板。
IntelliJ IDEA 为您提供 XML 和 YAML Liquibase changelog 文件的编码支持,包括针对 Liquibase 架构的验证、已知参数的建议,以及导航到属性声明和 included files。
主要和次要更新日志
IntelliJ IDEA 允许您将变更记录分为两类:主要和次要。 一种用例是分离可以自动运行的安全更改与需要您注意且手动运行的更改。
可以按类型自动分隔更改(在 中)。 或者,您可以使用 添加更新日志 操作在"预览"窗口中手动创建次要更改日志。 然后,您可以简单地将所需的变更集拖到新的变更日志中。
默认情况下,Primary 和 Secondary 变更日志会生成在不同的目录中,您可以在插件设置中进行自定义。 请在 部分的 IDE 设置中了解更多信息。
生成迁移脚本
如果尚未建立数据库连接,请 创建一个。
在 数据库 工具窗口中,右键点击某个数据库并选择 创建 Liquibase 更新日志。

或者,在编辑器中打开一个 JPA 实体并执行以下操作之一:
在装订区域中点击
并选择 创建 Liquibase 更新日志。
将文本光标置于实体上,按 Alt+Enter 调出意图操作,然后选择 创建 Liquibase 更新日志。
在打开的对话框中,选择源(数据模型的期望状态)和目标(数据模型的旧状态)。
您可以在以下源选项之间进行选择:
数据库 :当您已有最新的数据库,并希望生成迁移脚本以将另一数据库更新到相同状态时应使用此项。
模型 :用于生成表示实体关系模型(JPA 实体)当前状态与旧(目标)状态之间差异的迁移脚本。
目标可以设置为:
数据库 — 目标数据库的架构版本较旧。
快照 — 如果您想要的状态存储在数据模型快照中,请使用此选项。 它也可以由 IntelliJ IDEA 生成。
点击 OK。 IntelliJ IDEA 将分析 Source 和 Target 之间的差异,并显示 更新日志预览 对话框。
如果您希望将变更日志保存为常规文件,则可使用以下配置选项:
在 目录 字段中,指定您想要保存更改日志文件的位置。
在 文件名 字段中,输入生成的变更日志文件的名称。
您可以使用 包含到、 包含文件夹 和 包含上下文 来指定是否应在另一个变更日志中包含变更日志。 如果您选中 包含文件夹 复选框,它会为整个文件夹生成 include 语句,而不仅仅是当前的 更改日志。
在 文件类型 列表中,您可以选择 Liquibase 支持的四种文件类型之一(YAML、JSON、SQL、XML),IntelliJ IDEA 将在其中生成更新日志。
如果您想将变更日志保存为临时文件,请在 草稿文件 的 更新日志预览 对话框顶部选择并指定其名称和类型。

使用结构工具窗口浏览更改日志
如果您的 Liquibase 更改日志文件中有许多更改集, 逻辑视图的 结构 工具窗口可以帮助您快速预览文件并浏览其中的内容。 它将更改类型显示为单独的节点,您可以展开这些节点以获取更多详细信息。
逻辑视图适用于 XML 和 YAML 更改日志文件。
在编辑器中打开您的更改日志文件后,打开 结构 工具窗口: 。
或者按 Alt+7。
在 结构 工具窗口中,打开 逻辑 选项卡。
点击任意更改以导航到更改日志文件中的定义。 对于
include和includeAll标签,您将被重定向到包含文件中的更改集。

部署更改
准备好更改日志后,可使用专用 Liquibase 运行配置 触发更新并使数据库与代码同步。 可通过 运行微件 或选定的工具 Windows 启动此运行配置。
从运行微件运行更新
如果微件中已选中 Liquibase 运行配置,请点击
运行。
或者按 Shift+F10。
如果运行微件中选择了其他配置,请点击其名称。 在弹出窗口中,找到 Liquibase 运行配置并点击其右侧的
运行。
或者按 Alt+Shift+F10。 在弹出窗口中,选择 Liquibase 运行配置。
IntelliJ IDEA 会在 运行工具窗口 启动 Liquibase 运行配置。
从工具 Windows 运行更新
可以在以下工具 Windows 启动 Liquibase 运行配置:
持久性工具窗口:
右键点击持久化单元、实体或 Liquibase 更改日志,然后选择
运行 Liquibase 更新…。
数据库工具窗口:
转到工具栏并选择
运行 Liquibase 更新…。
右键点击数据库、架构或表,并选择
运行 Liquibase 更新…。
IntelliJ IDEA 会在 运行工具窗口 启动 Liquibase 运行配置。
从根更改日志运行更新
只要应用程序属性中的 spring.liquibase.change-log 指向您的 根更改日志文件,可以直接从该文件启动 Liquibase 运行配置。
打开您的根更改日志文件。
在 装订区域 ,点击
运行 Liquibase 更新…。

IntelliJ IDEA 会在 运行工具窗口 启动 Liquibase 运行配置。
Liquibase 运行配置
Liquibase 运行配置可让您无需运行完整应用程序或使用终端,即可将更改部署到已连接的数据库。 底层该配置会运行 Liquibase 更新命令。
创建 Liquibase 运行配置

运行配置选项
条目 | 描述 |
|---|---|
名称 | 在编辑或运行时,指定运行配置的名称以便快速识别。 |
存储为项目文件 | 将运行配置设置保存到文件中,以便与其他团队成员共享。 默认位置是 .idea/runConfigurations 。 但是,如果您不想共享 .idea 目录,您可以将配置保存到项目内的任何其他目录。 默认情况下,此选项是禁用的,IntelliJ IDEA 将运行配置设置存储在 .idea/workspace.xml 。 |
必填选项
其他选项
要将这些选项添加到运行配置中,请在对话框右侧选择 修改选项 ,然后从列表中选择相关选项。
条目 | 描述 |
|---|---|
上下文 | 指定 上下文筛选器以缩小 Liquibase 在更新期间要运行的更改集范围。 如需填写多个值,请用逗号分隔。 |
标签 | 指定 标签筛选器以缩小 Liquibase 在更新期间要运行的更改集范围。 如需填写多个值,请用逗号分隔。 |
日志级别 | 选择更新期间日志消息的最低严重级别。 可在 Liquibase 官方文档中详细了解该设置。 |
Liquibase 设置

基础设置
IntelliJ IDEA 允许您指定:
您要使用的 Liquibase 版本
更改集作者名称
默认文件类型。 支持以下四种文件类型:
XML
SQL
YAML
JSON
更新日志模板
每当创建空的或增量的 Liquibase 更改日志 时,IntelliJ IDEA 会根据模板生成文件名。 您可以配置主/副目录和变更日志的名称。
以下变量和宏可用于精确配置:
#increment(<start>, <step>, <decimalFormat>):使用数字序列生成版本。start:首个迁移的版本号step:每个版本号的递增值decimalFormat:用于格式设置版本号的 DecimalFormat 模式
#date(<simpleDateFormat>):使用当前系统日期生成版本。simpleDateFormat:用于格式设置日期的 SimpleDateFormat 模式
${semVer.<getterMethod>}:使用项目构建文件中的 语义版本生成版本。getterMethod:提取语义版本特定段的方法。 以下是 1.2.3-SNAPSHOT+build4 版本的示例:${semVer.getRawVersion()}:1.2.3-快照+build4${semVer.getMajor()}:1${semVer.getMinor()}:2${semVer.getPatch()}:3${semVer.getPreRelease()}:SNAPSHOT
数据库类型
有时软件必须支持几种 DBMS 类型。 在这种情况下,Liquibase 是最佳选择,因为它提供了一个跨数据库的解决方案来声明 DDL 修改。 IntelliJ IDEA 也支持此解决方案。 在生成跨数据库变更日志时,它使用 Liquibase 属性来为每个 DBMS 指定正确的数据类型:
因此,无需为不同的 DBMS 创建单独的变更日志。
更改集模板
变更集模板是使用 Liquibase 指定数据库模式更改的预定义结构,提供了标准化格式。 这些模板作为创建一致且可重用的改动集的基础,确保数据库部署中的统一性和易于维护。
IntelliJ IDEA 提供在生成变更集时应用模板的功能。 此功能提供了在其中包含各种可自定义元素的能力:
将空的回滚添加到不支持隐式回滚的变更集中——此选项会自动向任何新的变更集 缺少隐式回滚的变更集中添加一个带有 TODO 注释的空回滚标签。
failOnError 和 runOnChange:IntelliJ IDEA 支持 changeSet 标签内的常用属性,允许用户设置
failOnError和runOnChange的默认值。创建前置条件——每个变更集都可以有具体的前置条件。 例如,将为
tableExists和columnExists前提条件标签添加到addColumn语句:
请注意,某些 Liquibase changesets 可能不提供此选项。 例如,标签 procedureExists 不适用于 createProcedure 语句。

以下是展示启用所有四个功能的删除表变更集的示例:
Spring 项目的其他功能
在 IntelliJ IDEA 提供的标准 Liquibase 支持基础上,基于 Spring 框架的项目还能利用更多 IDE 功能。
更改日志和更改集的状态
通常,如果想查看哪些更改日志已应用,需运行 Liquibase 的 变更跟踪命令或检查数据库中的 更改日志表。 IntelliJ IDEA 通过在 IDE 中直接显示更改的状态,提供了更快捷的替代方式。
整个更改日志文件的状态会显示在 项目 工具窗口中(Alt+1)。

每个更改日志由 Liquibase 徽标 () 表示,其状态由徽标右下角的小图标反映:
图标 | 状态 |
|---|---|
更改日志中的所有更改集已成功应用到数据库。 | |
更改日志已运行,但其中有更改集失败。 将鼠标悬停在文件名称上可查看更多错误信息。 ![]() 要检查哪个更改集导致错误,请在编辑器中打开带下划线的更改日志,并查找装订区域中的红色感叹号。 | |
(无) | 在以下情况下不会显示状态图标:
|
打开更改日志文件时,各更改集的状态会显示在编辑器装订区域。

JPA Buddy 功能
您可以安装 JPA Buddy 插件,以获得对 Liquibase 的更多支持:
JPA 设计器
JPA 设计器 工具窗口允许您生成和修改代码。
在工具窗口(JPA Palette)的上部,选择一个操作,例如, 创建 ,然后双击一个元素,例如, 表。
工具窗口的下半部分(JPA Inspector)会根据所选的变更日志元素进行调整,例如 changeSet,并允许您修改其属性。
要了解有关 JPA Designer 的更多信息,请参阅 实体设计器。

编辑器工具栏
编辑器工具栏提供对相关操作的快速访问。 其中包括:
在 JPA 结构中选择已打开文件的操作
JPA Palette 中的所有操作
初始化架构更改日志操作
差异更改日志操作

JPA Buddy 理解您的数据模型,并尽可能预填更改集。 借助 JPA Inspector,您可以查看每个 更改日志 元素的属性:

故障排除
- 未显示状态图标的更改日志或更改集
此功能仅在 Spring 项目中可用。 若项目使用了 Spring,请确保:
已在项目的构建文件中 添加 Liquibase 依赖。
已 连接到对应数据库 ,且连接在 数据库 工具窗口中处于活动状态。
配置文件( application.properties 或 application.yml )满足如下条件:
spring.liquibase.change-log指向您的根更改日志文件。spring.liquibase.url或spring.datasource.url与用于连接数据库的 URL 匹配。
您已经 运行了 Liquibase 更新 ,其结果已被记录在 数据库更改日志表中。

