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.