JDBCTemplate - 如何 运行 以 Map<String, Object> 作为参数源的 UPDATE 语句?

JDBCTemplate - How to run an UPDATE statement with a Map<String, Object> as the parameter source?

对于 INSERT 语句,可以执行以下操作(db 是一个自动装配的 JdbcTemplate):

var insert = new SimpleJdbcInsert(db)
    .withTableName("orders")
    .usingGeneratedKeyColumns("id");

Map<String, Object> params = new HashMap<String, Object>();
params.put("clientId", 25);

var key = insert.executeAndReturnKey(params);

我找不到不需要一个一个地传递每个参数的等效更新方法。我在这方面大量使用了反射和泛型,我无法列出每个参数。我希望能够做这样的事情:

db.update("UPDATE orders set clientId = ? WHERE id = ?", params, id);

其中 params 是包含要更新的参数的名称和值的映射,id 是要影响的行的 ID。

这可能吗?

JdbcTemplate 只使用 ? 占位符,但它有一个密切相关的 class NamedParameterJdbcTemplate 本质上是相同的 class (它委托给 JdbcTemplate) 但带有命名占位符,例如 :clientId.