Как создать динамический «в (…)» sql-список через Spring JdbcTemplate?

Можно ли генерировать произвольные «in ()» списки в SQL-запросе через шаблон Jdbc:

пример:

“select * from t где c in (#)”, однако ‘#’ может быть произвольным списком значений, известных только во время выполнения.

Да, это возможно весной, если вы используете NamedParameterJdbcTemplate или SimpleJdbcTemplate с именованными параметрами. Параметр List может быть установлен как java.util.List :

 List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); List result = simpleJdbcTemplate.query("SELECT * FROM t WHERE c in (:list)", new RowMapper() { ... }, Collections.singletonMap("list", list)); 

В этом случае Spring внутренне создает SQL-запрос с необходимым количеством заполнителей на основе размера фактического списка при замене именованных параметров ? s.

В Hibernate вы можете использовать следующий пример:

 if(tenors != null && tenors.length >0) sql.append(" and ip.tenor_id in (:tenors)"); ..... if(tenors != null && tenors.length >0){ query.setParameterList("tenors", tenors); } ..... SQLQuery query = (SQLQuery) getSession().createSQLQuery(sql.toString()) 
 SimpleJDBCTemplate is depricated now. You can use NamedParameterJdbcTemplate instead. 

Пример кода ниже. Если у вас есть несколько параметров разного типа, вы можете использовать Object as key, иначе используйте List

 String sqlAllEmpl = queryLoader.getProperty("allEmployeesByLevelAndPeriod"); Map paramMap = new HashMap(); paramMap.put("level", levelStr); paramMap.put("periodList", periodList); gridList = namedParameterJdbcTemplate.query(sqlAllEmpl, paramMap, new YourRowMapper()); 

ваш sqlAllEmpl будет иметь двухместные держатели, level string и periodList – который является списком, используемым в инструкции IN sql.

  • Spring MVC @PathVariable с точкой (.) Получает усеченный
  • Как исправить роль в Spring Security?
  • Spring Security: несколько HTTP-конфигураций не работают
  • Понимание использования Spring @Autowired
  • Spring-Batch без сохранения метаданных в базе данных?
  • JsonMappingException: не найдено подходящего конструктора для типа : невозможно создать экземпляр из объекта JSON
  • Могу ли я сделать настраиваемый controller зеркальным отображением classов Spring-Data-Rest / Spring-Hateoas?
  • Включение зависимостей Spring в объект EntityListener
  • applicationContext не находит controllerы для контекста сервлета
  • могу ли я включать информацию пользователя при выдаче токена доступа?
  • Тип контента 'application / x-www-form-urlencoded; charset = UTF-8' не поддерживается для @RequestBody MultiValueMap
  • Давайте будем гением компьютера.