我的查询看起来像这样:
SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4))
它会选择t.a == 1 AND t.b == 2
或t.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工作,但这不会对这个问题产生影响)
答案 0 :(得分:3)
您可以将值作为对象数组的集合传递:
namedJdbcTemplate.queryForList(query, ImmutableMap.of(Lists.newArrayList(new Object[] {1,2}, new Object[]{3,4})));
我们使用Google Guava来实例化集合,因此我使用了ImmutableMap
和Lists
,但显然您可以按照自己的意愿创建它们。