gpt4 book ai didi

java - NamedParameterJdbcTemplate 和组合键

转载 作者:行者123 更新时间:2023-12-02 08:41:06 30 4
gpt4 key购买 nike

我编写了一个方法来使用 NamedParameterJdbcTemplate 检索条目列表:

public final Map<K,V> findAll(final Collection<K> keys) {
if (keys == null) {
return null;
}
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", keys);
List<V> values = new NamedParameterJdbcTemplate(datasource).query("select * from TABLE where id in ( :ids )", parameters, mapper);

Map<K,V> results = new HashMap<K, V>();
for (V v : values) {
results.put((K) v.getId(), v);
}
return results;
}

但这仅在 key 为简单类型时才有效。我无法使其与主键一起使用,例如:

public class CompositeKey implements Serializable {

private long field1;
private long field2;
}

如何使用复合键使用 findAll() 方法?

最佳答案

您的问题应分部分回答:

  • 如何写SELECT结合IN和元组比较
  • 如何写这样的SELECT使用NamedParameterJdbcTemplate

如何使用compund PK查询多个对象

PostgreSQL/MySQL(也可能是 Oracle):

 SELECT * FROM foo WHERE (field1, field2) IN ((1, 1), (1, 3));

SQL Server(有点破解;也适用于 PostgreSQL):

SELECT * FROM foo 
INNER JOIN (VALUES (1, 1), (1, 3)) AS _CONDITION(field1, field2) ON
foo.field1 = _CONDITION.field1 AND foo.field2 = _CONDITION.field2;

如何使用NamedParameterJdbcTemplate进行查询

使用List<Object[]>作为你的参数类型。请参阅JavaDoc for NamedParameterUtilsofficial documentation关于这个话题。

使用 map 参数的示例

public List<MyObject> findByIds(Collection<MyKey> keys) {
List<Object[]> keyTuples = new ArrayList<Object[]>(keys.size());
for (MyKey key : keys) {
keyTuples.add(new Object[] { key.getField1(), key.getField2() });
}
jdbcTemplate.query("SELECT * FROM my_table WHERE (field1, field2) IN (:keys)",
Collections.singletonMap("keys", keyTuples), new MyObjectRowMapper());
}

关于java - NamedParameterJdbcTemplate 和组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20103405/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com