SQL `IN` не работает в Spring Boot при использовании JDBCTemplate - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть объект шаблона JDB C, и я пытаюсь выполнить запрос к базе данных для удаления, но не могу выполнить этот запрос. Как я могу это сделать?

jdbcTemplate.update("delete from `message` where `id` IN (:ids) and `from` = ?;", new Integer[] {1, 2}, 1);

--- ДОБАВЛЕНО

public static final Map<String, String> SQL = new HashMap<String, String>() {{
        put("removeMessages", "delete from `message` where `id` IN ( :ids ) and `@` = :userId ;");
    }};


    public int removeMessages(@NonNull Integer[] ids, @NonNull Integer userId, boolean asSender) {
        MapSqlParameterSource parameters = new MapSqlParameterSource().addValue("ids", Arrays.asList(ids)).addValue("userId", userId);
        String sql = SQL.get("removeMessages").replace("@", asSender ? "from" : "to");
        return getInstance(MainSQL.class).query(sql, parameters);
    }

1 Ответ

0 голосов
/ 23 апреля 2020

Вам необходимо использовать NamedParameterJdbcTemplate для именованных параметров. Попробуйте использовать этот код:

List<Integer> ids= Arrays.asList(1,2);
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", ids);
parameters.addValue("from",1);
namedParameterJdbcTemplate.update("delete from `message` where `id` IN (:ids) and `from` = :from;",parameters);
...