【问题标题】:jOOQ - MySQL multiple row INSERT... ON DUPLICATE KEY UPDATE using VALUES() functionjOOQ - MySQL 多行插入... ON DUPLICATE KEY UPDATE 使用 VALUES() 函数
【发布时间】:2017-02-09 03:26:18
【问题描述】:

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

如果没有,有什么建议可以代替吗? (对于很多行)

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

【问题讨论】:

标签: java mysql sql jooq


【解决方案1】:

不,从 jOOQ 3.8 开始,没有此类支持,目前也没有计划添加支持。不过,您可以使用简单的 SQL 轻松完成这项工作:

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

有关 jOOQ 中“普通 SQL”的更多信息,请参阅: http://www.jooq.org/doc/latest/manual/sql-building/plain-sql

【讨论】:

    【解决方案2】:

    2021年更新,可以使用Jooq的InsertOnConflictWhereStep

    这是一个示例(在 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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 2017-01-11
      • 2011-02-12
      • 1970-01-01
      • 2022-11-15
      • 2012-06-11
      • 2014-06-05
      • 2016-08-28
      相关资源
      最近更新 更多