Spring BatchSqlUpdate vs NamedParameterJdbcTemplate使用命名参数

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

所以我对此有几个问题:

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

谢谢你的想法!

乔瓦尼

最佳答案 经过一番研究,我得出以下结论.

首先,我意识到NamedParameterJdbcTemplate类是唯一接受批量更新的命名参数的类.在Spring 3中添加了方法batchUpdate(String sql,Map [] batchValues)来实现这一点.

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

我认为在BatchSqlUpdate中有一个重写版本的updateByNamedParam(Map paramMap),就像update(Object … params)一样,但增加了对命名参数的支持.

点赞