How to execute IN() SQL queries with Spring's JDBCTemplate effectively? How to execute IN() SQL queries with Spring's JDBCTemplate effectively? java java

How to execute IN() SQL queries with Spring's JDBCTemplate effectively?


You want a parameter source:

Set<Integer> ids = ...;MapSqlParameterSource parameters = new MapSqlParameterSource();parameters.addValue("ids", ids);List<Foo> foo = getJdbcTemplate().query("SELECT * FROM foo WHERE a IN (:ids)",     parameters, getRowMapper());

This only works if getJdbcTemplate() returns an instance of type NamedParameterJdbcTemplate


I do the "in clause" query with spring jdbc like this:

String sql = "SELECT bg.goodsid FROM beiker_goods bg WHERE bg.goodsid IN (:goodsid)";List ids = Arrays.asList(new Integer[]{12496,12497,12498,12499});Map<String, List> paramMap = Collections.singletonMap("goodsid", ids);NamedParameterJdbcTemplate template =     new NamedParameterJdbcTemplate(getJdbcTemplate().getDataSource());List<Long> list = template.queryForList(sql, paramMap, Long.class);


If you get an exception for : Invalid column type

Please use getNamedParameterJdbcTemplate() instead of getJdbcTemplate()

 List<Foo> foo = getNamedParameterJdbcTemplate().query("SELECT * FROM foo WHERE a IN (:ids)",parameters, getRowMapper());

Note that the second two arguments are swapped around.