1. ホーム
  2. java

[解決済み] SpringのJDBCTemplateでIN()SQLクエリを効率的に実行する方法とは?

2022-04-16 12:14:22

質問

SpringのJDBCTemplateでIN()クエリを実行する、よりエレガントな方法はないかと考えています。現在、私はそのようなことを行っています。

StringBuilder jobTypeInClauseBuilder = new StringBuilder();
for(int i = 0; i < jobTypes.length; i++) {
    Type jobType = jobTypes[i];

    if(i != 0) {
        jobTypeInClauseBuilder.append(',');
    }

    jobTypeInClauseBuilder.append(jobType.convert());
}

IN()クエリ用の句を作るだけで9行もあるので、かなり苦痛です。プリペアドステートメントのパラメータ置換のようなものが欲しいところです。

どのように解決するのですか?

パラメータソースが必要です。

Set<Integer> ids = ...;

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", ids);

List<Foo> foo = getJdbcTemplate().query("SELECT * FROM foo WHERE a IN (:ids)",
     parameters, getRowMapper());

これは、以下の場合にのみ機能します。 getJdbcTemplate() のインスタンスを返します。 NamedParameterJdbcTemplate