我已成功使用BatchSqlUpdate
课程一段时间了。使用它的唯一烦恼是在使用declareParameter
或setParameter
方法运行任何查询之前需要注册命名参数。这意味着还必须声明参数的类型。但是,Spring还提供了一个NamedParameterJdbcTemplate
类,它有一个非常方便的batchUpdate
方法,它将命名参数作为输入(一组地图或SqlParameterSource
个对象)而不需要声明他们首先。最重要的是,这个类可以很容易地重用,我也相信它是线程安全的。
所以我对此有几个问题:
BatchSqlUpdate
没有,NamedParameterJdbcTemplate
为什么需要声明参数?感谢您的想法!
乔瓦尼
答案 0 :(得分:2)
在做了一些研究之后,我得出了以下结论。
首先,我意识到NamedParameterJdbcTemplate
类是唯一接受批量更新的命名参数的类。在Spring 3中添加了方法batchUpdate(String sql,Map[] batchValues)
来实现这一目标。
BatchSqlUpdate
类包含一个重写的update(Object... params)
方法,将给定的语句参数添加到队列中,而不是立即执行它们,如javadoc中所述。这意味着只有在调用flush()
方法或批量大小超过最大值时才会执行语句。此分类不支持命名参数,但它包含从updateByNamedParam()
继承的SqlUpdate
方法。这很不幸,因为这个方法允许为命名参数重用相同的映射,而NamedParameterJdbcTemplate.batchUpdate()
方法需要一个映射数组,相关的开销,代码膨胀以及如果批量大小重用地图数组的复杂性是可变的。
我认为updateByNamedParam(Map paramMap)
中的BatchSqlUpdate
被覆盖版本的行为与update(Object... params)
类似,但增加了对命名参数的支持。