web-dev-qa-db-ja.com

NamedParameterJDBCTemplateの文字列のリストを使用して結果を取得する方法

Spring-JDBCの実験。参照として this を使用しています。同じ姓を持つ俳優のリストを取得しようとしています。このコードを実行すると、望ましい結果が得られました。

_public List<String> getActorsWithSameLastName(String lastName,
            NamedParameterJdbcTemplate template) {
        String query = "SELECT FIRSTNAME FROM ACTORS WHERE LASTNAME=:LASTNAME";
        Map<String, String> paramMap = new HashMap<String, String>();
        paramMap.put("LASTNAME", lastName);
        return template.queryForList(query, paramMap, String.class);
    }
_

姓の_List<String>_があります。所有しているリストで俳優のリストを取得するにはどうすればよいですか?姓のリストを反復処理してgetActorsWithSameLastName()を毎回呼び出すか、springが反復処理を実行して結果を取得する方法を提供しますか?ご意見をお聞かせください。

21
Mono Jamoon

IN句を使用します。

JDBCTemplatesでSELECT IN句を使用する方法

List<String> lastnames= new ArrayList<>();

Map namedParameters = Collections.singletonMap("lastnamevalues", lastnames);

StringBuffer recordQueryString = new StringBuffer();

recordQueryString.append("select FIRSTNAME, LASTNAME from ACTORS where lastname in (:lastnamevalues)");

List nameInvolvements = this.namedparameterJdbcTemplate.query(recordQueryString.toString(), namedParameters, new MyMapper());
31
Shashi

MapSqlParameterSource を使用することもできます

String query = "SELECT FIRSTNAME FROM ACTORS WHERE LASTNAME in (:LASTNAME)";
Set<String> ids = ....;

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

this.namedparameterJdbcTemplate.query(query.toString(), parameters);
12
Jayamohan