2013-01-21 13 views
14

Eksperymentowanie ze Spring-JDBC. Używam this jako odniesienia. Próbuję uzyskać listę aktorów, którzy mają to samo nazwisko. Uruchomienie tego kodu dał mi pożądanych rezultatów:Sposób korzystania z listy ciągów znaków w NamedParameterJDBCTemplate w celu uzyskania wyników.

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

Mam List<String> z nazwisk. Jak mogę uzyskać listę aktorów z listą, którą mam? Czy powtarzam listę nazwisk i czy za każdym razem dzwonię pod numer getActorsWithSameLastName(), czy też wiosna zapewnia sposób, w jaki dokonuje iteracji i pobiera dla mnie wynik? Proszę o poradę.

Odpowiedz

21

Zastosowanie w Punkcie ..

How to use SELECT IN clause in 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()); 
+0

Thanks a lot człowieka. Niesamowita odpowiedź. –

+0

Podoba mi się jeden kod linii. Dzięki –

8

Można również użyć 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); 
+0

Dziękuję, działało to w przypadku, gdy miałem zestaw więcej niż jednego obiektu String – Dayna

Powiązane problemy