web-dev-qa-db-fra.com

Comment utiliser une liste de chaînes dans NamedParameterJDBCTemplate pour obtenir des résultats

Expérimentation avec Spring-JDBC. J'utilise this comme référence. J'essaie d'obtenir une liste d'acteurs qui portent le même nom de famille. L'exécution de ce code m'a donné les résultats souhaités:

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);
    }

J'ai un List<String> De noms de famille. Comment puis-je obtenir une liste d'acteurs avec la liste que j'ai? Dois-je parcourir la liste des noms de famille et appeler la getActorsWithSameLastName() à chaque fois ou le printemps fournit-il un moyen de faire l'itération et de récupérer le résultat pour moi? Veuillez conseiller.

21
Mono Jamoon

Utilisez la clause IN.

Comment utiliser la clause SELECT IN dans JDBCTemplates?

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

Vous pouvez également utiliser 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