Как создать динамический "в (...)" sql-список через Spring JdbcTemplate?
Можно ли генерировать произвольные "in()" списки в запросе SQL через шаблон Jdbc:
Пример:
"выберите * из t, где c in (#)", однако '#' может быть произвольным списком значений, известных только во время выполнения.
Ответ 1
Да, это возможно в Spring, если вы используете NamedParameterJdbcTemplate или SimpleJdbcTemplate с именованными параметрами. Параметр List может быть установлен как java.util.List:
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
List<SomeObject> result = simpleJdbcTemplate.query("SELECT * FROM t WHERE c in (:list)",
new RowMapper<SomeObject>() { ... },
Collections.singletonMap("list", list));
В этом случае Spring внутренне создает SQL-запрос с требуемым количеством заполнителей на основе размера фактического списка при замене именованных параметров ? s.
Ответ 2
В Hibernate вы можете использовать следующий образец:
SimpleJDBCTemplate is depricated now. You can use NamedParameterJdbcTemplate instead.
Ниже приведен пример кода.
Если у вас есть несколько параметров разного типа, вы можете
используйте Object в качестве ключа, в противном случае используйте List<T>