Переписать jdbcTemplate.batchUpdate в NamedParameterJdbcTemplate.batchUpdate - PullRequest
0 голосов
/ 22 октября 2019

У меня есть такой SQL:

private final String SQL_INSERT_OR_UPDATE = "INSERT INTO currency_rate(currency_id, rate, update_date) " +
            "SELECT currency.id, ?, ? " +
            "FROM currency " +
            "WHERE currency.code = ? " +
            "ON DUPLICATE KEY UPDATE rate = ?";

И код в Java:

public int[] saveOrUpdate(List<String> codes, List<BigDecimal> rates, LocalDate date) {
        return this.jdbcTemplate.batchUpdate(
                SQL_INSERT_OR_UPDATE,
                new BatchPreparedStatementSetter() {

                    public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException {
                        ps.setBigDecimal(1, rates.get(i));
                        ps.setDate(2, Date.valueOf(date));
                        ps.setString(3, codes.get(i));
                        ps.setBigDecimal(4, rates.get(i));
                    }

                    public int getBatchSize() {
                        return codes.size();
                    }
                });
    }

Теперь я хочу переписать этот код для использования NamedParameterJdbcTemplate. Я знаю только один способ: пройти через мои списки и создавать объекты. Затем поместите эти объекты в список и создайте SqlParameterSource. Но его много объектов, которые будут созданы. Есть ли другой способ использовать список, который у меня уже есть, и не создавать армию объектов?

...