来自 apache 的 DDLUtils 的替代方案

2022-09-03 08:02:30

我想知道有哪些替代方案可以取代Apache的DDL实用程序。

我问这个是因为ddlutils项目接缝是死的,而且它不支持H2数据库。我搜索了一下,找到了像liquidbase或flyway这样的建议。

我的问题是:这些框架在项目启动时运行,并根据一些XML文件更改数据库结构。它们实际上是为数据库迁移而设计的。

我想要的是一个框架,可以在运行时创建/ALTER表,在高抽象级别,即至少支持Mysql,Sqlserver,oracle和H2。

例如,我可以告诉引擎,我想创建一个带有类型编号的字段 AGE 的表,框架将改写为:

create table MY( id bigint(20))
create table MY(id bigint)
create table MY (id, number)

取决于底层数据库引擎。

有什么建议吗?

我可以看到有一个ddlutils的补丁,因为它支持H2。但是我无法修补我的svn结帐...

任何帮助将不胜感激。

提前感谢瑞


答案 1

我知道这是一个老话题,但想给出一个明确的答案。

是的,DdlUtils已经死了,现在已经2年没有更新了。

但是,看起来这些家伙可能已经切换到 https://www.symmetricds.org。他们的回购是 https://github.com/JumpMind/symmetric-ds

一旦你划破表面,你就会发现DdlUtils的核心仍然存在(甚至有一些旧的Apache版权声明)。

类名已更改,API 已更改,因此不存在 1 对 1 映射,但它会定期更新,并包括 H2 和其他数据库支持。老实说,我宁愿得到这些东西,而不是保留旧的API。

你不会找到一个关于使用对称DS的指南,就像旧的DdlUtils doco一样,但是代码中有足够的代码,你应该能够把它拼凑在一起。


答案 2

看看jOOQ它在生成DDL(以及DML)方面非常有用。

create.createTable("table")
      .column("column1", INTEGER)
      .column("column2", VARCHAR(10).nullable(false))
      .constraints(
          constraint("pk").primaryKey("column1"),
          constraint("uk").unique("column2"),
          constraint("fk").foreignKey("column2").references("some_other_table"),
          constraint("ck").check(field(name("column2")).like("A%"))
      )
      .execute();

推荐