jOOQ - 使用VALUES()函数的MySQL多行INSERT ... ON DUPLICATE KEY UPDATE

时间:2016-09-30 14:05:01

标签: java mysql sql jooq

jOOQ是否支持VALUES()函数用于INSERT ... ON DUPLICATE KEY UPDATE?

如果没有,有关如何改为的建议吗? (对于很多行)

请参阅:http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values

2 个答案:

答案 0 :(得分:3)

不,从jOOQ 3.8开始,没有这样的支持,目前还没有计划添加支持。不过,您可以使用纯SQL轻松地在您身边工作:

public static <T> Field<T> values(Field<T> field) {
    return DSL.field("values({0})", field.getDataType(), field);
}

有关&#34;普通SQL&#34;的更多信息。在jOOQ中,请参阅: http://www.jooq.org/doc/latest/manual/sql-building/plain-sql

答案 1 :(得分:0)

2021 年更新,您可以使用 Jooq 的 https://ws4py.readthedocs.io/en/latest/

这是一个示例(在 Kotlin 中):

fun saveOrUpdate(items: Iterable<SomeClass>) {
    dsl.insertInto(
        TABLE,
        TABLE.FIELD1,
        TABLE.FIELD2,
    ).apply {
        items.forEach { item ->
            values(
                item.field1,
                item.field2
            )
                .onConflict(
                    TABLE.FIELD1
                )
                .doUpdate()
                .set(TABLE.FIELD2, item.field2)
                .set(TABLE.UPDATED_AT, currentOffsetDateTime())
        }
    }
        .execute()
}