NamedJDBCTemplate Parameters 是列表列表
NamedJDBCTemplate Parameters is list of lists
我有一个看起来像这样的查询:
SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4))
它会 select 任何 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
,但显然您可以按照自己的意愿创建它们。
我有一个看起来像这样的查询:
SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4))
它会 select 任何 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
,但显然您可以按照自己的意愿创建它们。