【问题标题】:Difference between newObject[]{...parameters..} and PreparedStatementSetter Interface implementation in Spring JDBC?Spring JDBC中newObject[]{...parameters..}和PreparedStatementSetter接口实现的区别?
【发布时间】:2020-05-27 07:32:57
【问题描述】:
使用 new Object[]{parameters} 向 SQL 语句传递参数和使用 PreparedStatementSetter 接口有什么区别?
两者都为我们的 sql 查询语句中的占位符提供值,那么当我们可以使用 new Object[] 传递参数时,为什么我们实际上要提供如此长的 PreparedStatementSetter 接口实现呢??
【问题讨论】:
标签:
java
spring
jakarta-ee
spring-jdbc
【解决方案1】:
区别在于方便。
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)。
方便的方法很好,因为它们使常见的操作更容易执行。如果需要,提供对底层方法的访问还允许您执行不常见的操作。
作为一个你永远不知道调用者可能需要什么的库,为调用者提供可供选择的选项是非常合适的。
大多数人永远不需要PreparedStatementSetter 或ResultSetExtractor 版本,因此请忽略它们,但请记住它们的存在,以备不时之需。