2016-05-30 3 views
2

Ich möchte Listenwerte in IN-Klausel mit jdbcTemplate in MySQL-Abfrage übergeben. Wie unten,wie Listenparameter in IN-Klausel mit jdbcTemplate übergeben

List<Long> listId= new ArrayList<>(); 
listId.add(1234L); 
listId.add(1235L); 
listId.add(1236L); 

String type ="A"; 
List<BojoClass> result = new ArrayList<>(); 
String sql="select column1,column2 from table where columName in(?)" 
result = jdbcTemplate.query(sql, new Object[]{listId}, new BeanPropertyRowMapper<BojoClass>(BojoClass.class)); 

Wie erreichen Sie das auf die beste Weise?

Antwort

5

NamedParameterJdbcTemplate kann Ihnen helfen.

Für Ihre Probe, versuchen Sie dies bitte

NamedParameterJdbcTemplate jdbcTemplate = ... 

List<Long> listId= new ArrayList<>(); 
listId.add(1234L); 
listId.add(1235L); 
listId.add(1236L); 

String sql="select column1,column2 from table where columName in(:ids)"; 
List<BojoClass> result = new ArrayList<>(); 
Map idsMap = Collections.singletonMap("ids", listId); 
result = jdbcTemplate.query(sql, idsMap, ParameterizedBeanPropertyRowMapper.newInstance(BojoClass.class)); 

Edited :):

Wenn Sie DataSource bekommen können, können Sie einfach init ein NamedParameterJdbcTemplate Objekt von seinem Konstruktor wie:

NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); 
+0

ich immer kompilieren bin Zeit excetion: "kein geeignetes Verfahren zur Abfrage (String, Karte, ParameterizedBeanPropertyRowMapper ) gefunden" – MMMMS

+0

Ist 'Ihr jdbcTemplate Typ NamedParameterJdbcTemplate'? – Blank

+0

Nr. Wie man es macht? – MMMMS

1

Sie können Ihre Liste mit StringUtils.join(paramListForInClause, ","); verbinden, um die Zeichenfolge zu generieren, die Sie benötigen

Verwandte Themen