我有一个查询,看起来像这样:
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工作,但这对这个问题没有影响)
最佳答案
您可以将值作为对象数组的集合传入:
namedJdbcTemplate.queryForList(query, ImmutableMap.of(Lists.newArrayList(new Object[] {1,2}, new Object[]{3,4})));
我们使用Google Guava实例化集合,因此为什么我要使用
ImmutableMap
和Lists
,但是显然您可以按照自己的意愿去创建它们。