我有表列名称的列表,它的值将在运行时确定。现在,我正在使用以下方法来实现此功能,即需要为每个列名称将Filed转换为TableField。有什么更好的办法吗?

override fun updateFields(job: Job, jsonObject: JsonObject, handler: Handler<AsyncResult<Job?>>): JobQService {


    val updateFieldsDsl = dslContext.update(JOB)

    var feildSetDsl: UpdateSetMoreStep<*>? = null

    jsonObject.map.keys.forEach { column ->
        feildSetDsl = if (feildSetDsl == null) {
            updateFieldsDsl.set(JOB.field(column) as TableField<Record, Any>, jsonObject.getValue(column))
        } else {
            feildSetDsl!!.set(JOB.field(column) as TableField<Record, Any>, jsonObject.getValue(column))
        }
    }

    val queryDsl = feildSetDsl!!.where(JOB.ID.eq(job.id))

    jdbcClient.rxUpdateWithParams(queryDsl.sql, JsonArray(queryDsl.bindValues)).subscribeBy(
            onSuccess = { handler.handle(Future.succeededFuture(job)) },
            onError = { handler.handle(Future.failedFuture(it)) }

    )

    return this;
}

最佳答案

我不确定“更好”是什么意思,但是有一种方法 UpdateSetStep.set(Map) ,它似乎对您尝试执行的操作很有帮助。参见javadoc:

07-24 09:48
查看更多