

フレームワークはSpringを使用しています。  
`NamedParameterJdbcTemplate`クラスなどを使って下記のプレースホルダ(:idの部分)に対して複数の値を並べてSQLを実行させることは可能でしょうか。テーブルからとってきた複数のuserIdを下記のプレースホルダに並べてSQLを実行させるようにしたいと考えていますが、どう実装すれば分からず悩んでいます。  
■プレースホルダ含むSQL文

[code]

    // SQLの定義
    String sql = "select name from sampletbl where id in(:id)";
    
[/code]


CC BY-SA 3.0
2016-09-25T06:04:11.270
29111
2016-09-29T06:57:15.070
2016-09-25T13:18:45.957
15185
17348
question
java spring
SQLのIN句に使う複数の値を名前付きパラメータで指定したい


in句に渡すパラメータをSetなどのコレクションにすると、その要素数分プレースホルダが作られて値がせっとされます。

[code]

        Set<Integer> ids = new HashSet<>();
        ids.add(1);
        ids.add(2);
        ids.add(3);
    
        MapSqlParameterSource parameters = new MapSqlParameterSource();
        parameters.addValue("ids", ids);
        List<String> result = this.namedJdbcTemplate.query("select name from sampletbl where id in (:ids)", parameters, (resultSet, i) -> resultSet.getString("name"));
        System.out.println(result);
    
[/code]

実行時には、以下のようなSQLとなります。

[code]

    select name from sampletbl where id in (?, ?, ?)
    
[/code]


CC BY-SA 3.0
2016-09-29T06:57:15.070
29235
2016-09-29T06:57:15.070
4464
29111
answer