Spring JDBC 中 newObject[]{...parameters..} 和 PreparedStatementSetter 接口实现的区别?

Difference between newObject[]{...parameters..} and PreparedStatementSetter Interface implementation in Spring JDBC?

使用新的 Object[]{parameters} 将参数传递给 SQL 语句和使用 PreparedStatementSetter 接口有什么区别?

两者都为我们的 sql 查询语句中的占位符提供了值,那么当我们可以只使用 new Object[] 传递参数时,为什么我们实际上应该去提供这么长的 PreparedStatementSetter 接口实现??

区别是方便

query(String sql, Object[] args, int[] argTypes, ...)query(String sql, Object[] args, ...) 都是 convenience 方法,在内部调用 query(String sql, PreparedStatementSetter pss, ...).

query(..., RowCallbackHandler rch)query(..., RowMapper<T> rowMapper)一样都是便捷方法,在内部调用query(..., ResultSetExtractor<T> rse).

方便的方法很好,因为它们使常见的操作更容易完成。如果需要,提供对底层方法的访问也允许您执行不常见的操作。

作为一个图书馆,你永远不知道调用者可能需要什么,为调用者提供可供选择的选项是非常合适的。

大多数人永远不需要 PreparedStatementSetterResultSetExtractor 版本,因此请忽略它们,但请记住它们存在,以备不时之需。