5

我已经BatchSqlUpdate成功使用了一段时间。declareParameter使用它的唯一麻烦是在使用orsetParameter方法运行任何查询之前需要注册命名参数。这意味着也必须声明参数的类型。但是,Spring 也提供了一个NamedParameterJdbcTemplate类,它有一个非常方便的方法,可以将命名参数作为输入(映射或对象batchUpdate的数组) ,而无需先声明它们。最重要的是,这个类可以很容易地重用,我也相信它是线程安全的。所以我对此有几个问题:SqlParameterSource

  • 执行(多个)批量更新的推荐方法是什么?
  • 为什么此功能会在两个行为也不同的不同类中重复?
  • 如果不需要,为什么BatchSqlUpdate需要声明的参数NamedParameterJdbcTemplate

感谢您的想法!

乔瓦尼

4

1 回答 1

2

经过一番研究,我得出以下结论。

首先,我意识到NamedParameterJdbcTemplate该类是唯一接受命名参数进行批量更新的类。该方法batchUpdate(String sql,Map[] batchValues)是在 Spring 3 中添加的以实现此目的。

该类BatchSqlUpdate包含一个重写的update(Object... params)方法,该方法将给定的语句参数添加到队列中,而不是立即执行它们,如 javadoc 中所述。flush()这意味着只有在调用方法或批处理大小超过最大值时才会执行语句。这个类不支持命名参数,尽管它包含一个updateByNamedParam()继承自SqlUpdate. 这是不幸的,因为此方法允许为命名参数重用相同的映射,而该NamedParameterJdbcTemplate.batchUpdate()方法需要映射数组,如果批量大小是可变的,则具有相关的开销、代码膨胀和重用映射数组的复杂性。

updateByNamedParam(Map paramMap)我认为让in的重写版本BatchSqlUpdate表现得像update(Object... params)但增加了对命名参数的支持会很有用。

于 2013-04-02T14:55:47.650 回答