我们有一个由 Jdbi ( ) 执行的 SQL 语句org.skife.jdbi.v2
。对于绑定参数,我们使用 Jdbi 的bind
方法:
Handle handle = ...
Query<Map<String, Object>> sqlQuery = handle.createQuery(query);
sqlQuery.bind(...)
但是,我们在列表中遇到问题,目前我们正在使用String.format
它。所以我们的查询看起来像这样:
SELECT DISTINCT
tableOne.columnOne,
tableTwo.columnTwo,
tableTwo.columnThree
FROM tableOne
JOIN tableTwo
ON tableOne.columnOne = tableTwo.columnOne
WHERE tableTwo.columnTwo = :parameterOne
AND tableTwo.columnThree IN (%s)
%s
被替换为String.format
所以我们必须在java代码中生成一个正确的字符串。然后在全部%s
替换之后我们使用jdbi的bind
方法来替换所有其他参数(:parameterOne
或?
)。
有没有办法String.format
用jdbi代替?有一种方法bind(String, Object)
,但默认情况下它不处理列表/数组。我发现这篇文章解释了如何编写我们自己的工厂来绑定自定义对象,但它看起来需要付出很多努力,尤其是对于应该已经支持的东西。