我有一个查询,看起来像这样:

SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4))

并且它将选择t.a == 1 AND t.b == 2t.a == 3 AND t.b == 4的任何记录。

这似乎工作正常。

但是,我想不出一种干净的方法来将参数指定为NamedJDBCTemplate。我试图给它一个列表列表(即List<List<int>>),但这样做似乎很麻烦。
val query = "SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES :values)"

namedJdbcTemplate.queryForList(query, mapOf("values" to listOf(listOf(1, 2), listOf(3, 4))))

我也尝试过手动将值转换为字符串,但这也不会让它满意。
namedJdbcTemplate.queryForList(query, mapOf("values" to "(1, 2), (3, 4)"))

(我实际上在Kotlin工作,但这对这个问题没有影响)

最佳答案

您可以将值作为对象数组的集合传入:

namedJdbcTemplate.queryForList(query, ImmutableMap.of(Lists.newArrayList(new Object[] {1,2}, new Object[]{3,4})));

我们使用Google Guava实例化集合,因此为什么我要使用ImmutableMapLists,但是显然您可以按照自己的意愿去创建它们。

08-03 20:15