NamedJDBCTemplate参数是列表列表

时间:2018-05-09 20:28:09

标签: java jdbc kotlin spring-jdbc jdbctemplate

我的查询看起来像这样:

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工作,但这不会对这个问题产生影响)

1 个答案:

答案 0 :(得分:3)

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

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

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