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