groovy 的 addBatch(map) 如何为 Sql.withBatch 工作?



我正在尝试从静态类型语言调用groovy.sql.Sql.batch

我在回调对象ps上成功调用addBatch,参数类型为List。这对于像insert into TABLENAME(a, b, c) values (?, ?, ?)这样的语句很有效。

引用文档:

Named parameters (into maps or domain objects) are also supported:
def updateCounts = sql.withBatch(20, 'insert into TABLENAME(a, b, c) values (:foo, :bar, :baz)') { ps ->
ps.addBatch([foo:10, bar:12, baz:5])  // map
ps.addBatch(foo:7, bar:3, baz:98)     // Groovy named args allow outer brackets to be dropped
...
}

所以,我想也支持使用批量更新地图。问题是,BatchingPreparedStatementWrapper类型的回调参数不提供方法addBatch(Map),而只是重载addBatch(Object[]),addBatch(List),addBatch(String)

Sql.withBatch如何与kotlin或java的Map参数一起使用?它如何在groovy中工作而不抛出NoSuchMethodError MissingMethodException之类的?

def f(Object[] p){
println p
}

f( a:1, b:2, c:3 )

works fine and print:

[[a:1, b:2, c:3]]

所以,如果你有f(Object[] x)函数,那么f(a:123)等于f( [ [a:123] ] )

这意味着从Java下面应该工作:

Map params = new HashMap();
params.put("a", 123);
ps.addBatch( new Object[]{ params } );

最新更新