将jdbcTemplate.batchUpdate重写为NamedParameterJdbcTemplate.batchUpdate

时间:2019-10-22 07:05:04

标签: java sql spring jdbctemplate

我有这样的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。但是它分配了要创建的对象。有没有其他方法可以使用我已经拥有的列表而不创建大量对象?

0 个答案:

没有答案