用于调用存储过程的春季 JDBC 模板
2022-08-31 11:30:05
使用现代(约2012年)春季JDBC模板调用存储过程的正确方法是什么?
比方说,我有一个同时声明和参数的存储过程,如下所示:IN
OUT
mypkg.doSomething(
id OUT int,
name IN String,
date IN Date
)
我遇到了基于方法的方法,我们必须明确注册和参数。在类中考虑以下方法:CallableStatementCreator
IN
OUT
JdbcTemplate
public Map<String, Object> call(CallableStatementCreator csc, List<SqlParameter> declaredParameters)
当然,我知道我可以这样使用它:
List<SqlParameter> declaredParameters = new ArrayList<SqlParameter>();
declaredParameters.add(new SqlOutParameter("id", Types.INTEGER));
declaredParameters.add(new SqlParameter("name", Types.VARCHAR));
declaredParameters.add(new SqlParameter("date", Types.DATE));
this.jdbcTemplate.call(new CallableStatementCreator() {
@Override
CallableStatement createCallableStatement(Connection con) throws SQLException {
CallableStatement stmnt = con.createCall("{mypkg.doSomething(?, ?, ?)}");
stmnt.registerOutParameter("id", Types.INTEGER);
stmnt.setString("name", "<name>");
stmnt.setDate("date", <date>);
return stmnt;
}
}, declaredParameters);
当我已经在我的实现中注册它们时,目的是什么?换句话说,为什么我需要通过一个春天可以简单地在内部做?基本上,我不能通过其中任何一个而不是两个吗?declaredParameters
csc
csc
con.prepareCall(sql)
或者,有没有比我到目前为止遇到的更好的方法来调用存储过程(使用Spring JDBC模板)?
注意:您可能会发现许多问题似乎具有相似的标题,但它们与此问题不同。