Java Jdbctemplate запрос для списка с именованным параметром и сопоставления строк? - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь реализовать метод запроса Jdbctemplate, который будет принимать карту именованных параметров и преобразователь строк в качестве дополнительных аргументов.

Пока у меня есть следующее:

    final SqlParameterSource namedParameters = new MapSqlParameterSource().addValue("searchTerm", "%" + text + "%");
List<Map<String, String>> result = (List<Map<String, String>>)jdbcTemplate.queryForList(query, namedParameters, (ResultSet rs) ->
{
    List<Map<String, String>> rows = new ArrayList<>();
    while (rs.next())
    {
        Map<String, String> row = new HashMap<>();
        for (int x = 0, j = queryColumns.length; x < j; x++) {
            row.put(queryColumns[x], rs.getString(queryColumns[x]));
        }
        rows.add(row);
    }
    return rows;
});

return result;

Это дает мне следующую ошибку:

Ошибка: (67, 83) Java: не найдено подходящего метода для queryForList (java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource, (ResultSet [...] ws;}) метод org.springframework.jdbc.core.JdbcTemplate.queryForList (java.lang.String, java.lang.Class) не применим (не может выводить переменные типа) T(фактические и формальные списки аргументов различаются по длине)) метод org.springframework.jdbc.core.JdbcTemplate.queryForList (java.lang.String, java.lang.Object [], int [], java.lang.Class) не являетсяприменимо ....

Можно ли выполнить такой запрос с помощью Jdbctemplate и как мне это сделать?

1 Ответ

0 голосов
/ 02 мая 2019

Именованные параметры поддерживаются через NamedParameterJdbcTemplates.Вы можете использовать что-то вроде:

final Map<String, Object> namedParameters = Collections.singletonMap("searchTerm", "%" + text + "%");
List<Map<String, String>> result = new NamedParameterJdbcTemplate(jdbcTemplate).query(query, namedParameters, (rs, rowNum) ->
{
    Map<String, String> row = new HashMap<>();
    for (int x = 0, j = queryColumns.length; x < j; x++) {
        row.put(queryColumns[x], rs.getString(queryColumns[x]));
    }
    return row;
});

return result;
...