使用 flyway 占位符生成 sql 语句

Posted

技术标签:

【中文标题】使用 flyway 占位符生成 sql 语句【英文标题】:Generate sql statements with flyway placeholders 【发布时间】:2020-12-13 04:45:59 【问题描述】:

我试图将一些 sql 插入语句保存到文件中以用于测试。 我想为此使用flyway placeholders,但我找不到。

Java 中的一些示例:

var sqlTXT = sql.insertInto(table("TBLNAME"))
     .set(field("strCol"), field("strVal").toString())
     .set(field("placeHolderCol"), field(inline("$flyway:user")))
     .getSQL(ParamType.INLINED);

这将产生如下 SQL 字符串:

insert into TBLNAME (strCol, placeHolderCol) values ('strVal', '$flyway:user')

我正在寻找这样的东西

insert into TBLNAME (strCol, placeHolderCol) values ('strVal', $flyway:user)

所以flyway可以替换$flyway:user并插入用户名。

有没有办法像这样渲染 sql 还是我必须“手动”完成?

【问题讨论】:

【参考方案1】:

Flyway 的占位符与任何其他“供应商特定”SQL 语法没有什么不同,jOOQ 不支持开箱即用,因此plain SQL templating 有答案。

随便用

field("$flyway:user")

不要使用DSL.inline(),它用于创建"inline values"(例如字符串文字)。

【讨论】:

以上是关于使用 flyway 占位符生成 sql 语句的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 是不是有我们可以在 SQL 迁移中使用的“数据库名称”占位符?

Flyway 数据库迁移中占位符的用途

Flyway 以编程方式设置占位符

flyway POM.XML 中的默认占位符

SQL 语句在Java中如何使用占位符?

Sql语句占位符?的使用