0

私は春のフレームワークが初めてです。複数のパターンに一致するNamedParameterJdbcTemplateを使用して、SQL Server 2005 データベース テーブルからレコード セットを取得しようとしています(パターンは ArrayList に格納されます)。

以下のコードは、一連の値に一致するレコード セットを取得します。

List<String> valuesForBuildingPatterns1 = getValuesForBuildingPatterns1();
List<String> valuesForBuildingPatterns2 = getValuesForBuildingPatterns2();
String sqlQuery = "SELECT * FROM sqlServerTable col1 IN (:pattern1) AND col2 IN (:pattern2)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pattern1", valuesForBuildingPatterns1);
params.addValue("pattern2", valuesForBuildingPatterns2);
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());

問題: 文字列値のリストを検索する代わりに、正規表現パターン(%xyz% など)のリストを検索したい。しかし、以下に示すように、SQL クエリで "IN" 句と "LIKE" 演算子の両方を使用することはできません。

List<String> pattern1 = new ArrayList<String>();
List<String> pattern2 = new ArrayList<String>();

for(String str : valuesForBuildingPatterns1)
pattern1.add("%"+str+"%"); //If str="xyz", it adds "%xyz%" to the new list
for(String str : valuesForBuildingPatterns2)
pattern2.add("%"+str+"%");

String sqlQuery = "SELECT * FROM sqlServerTable col1 IN LIKE (:pattern1) AND col2 IN (:pattern2)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pattern1", pattern1);
params.addValue("pattern2", pattern2);
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());

また、リストをループして、「IN」句を使用せずに「LIKE」演算子のみを使用して SQL クエリを構築しようとしましたが、query() メソッドはこれを受け入れません。その上、このように SQL クエリを作成することは、NamedParameterJdbcTemplate を使用する主な目的に勝っていると思います。

for(String str1 : valuesForBuildingPatterns1)
for(String str2 : valuesForBuildingPatterns2)
{
String sqlQuery = "SELECT * FROM sqlServerTable col1 LIKE " + str1 + " AND col2 LIKE " + str2";
resultset.add(namedParameterJdbcTemplate.query(sqlQuery,null,new MyRowMapper()));
}

この問題を解決する方法を教えてください。さらに情報が必要かどうか教えてください。フレームワークについてあまり知らないので、私の無知を親切に許してください。どうもありがとう。よろしくお願いいたします。

PS: プロジェクトは、私が働いている組織によって開発された内部ツールを使用して開発されています。このツールは Spring フレームワーク上に構築されているため、Spring フレームワークが提供するすべてのサービスをサポートしています。

4

1 に答える 1