2013-01-21 66 views
14

試驗Spring-JDBC。我使用this作爲參考。我正在嘗試獲取具有相同姓氏的演員名單。運行該代碼給了我所期望的結果:如何使用NamedParameterJDBCTemplate中的字符串列表獲取結果

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()或者春天是否提供了一種方法來完成迭代併爲我獲取結果?請指教。

回答

21

使用IN子句..

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

感謝很多人。真棒迴應。 –

+0

我喜歡一行代碼。謝謝 –

8

您還可以使用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

謝謝,這適用於我有一組多個String對象的情況 – Dayna

相關問題