Spring JDBC Template para llamar a procedimientos almacenados
¿Cuál es la forma correcta de invocar procedimientos almacenados utilizando la plantilla JDBC de primavera moderna (circa 2012)?
Say, tengo un procedimiento almacenado que declara tantoIN
yOUT
parámetros, algo como esto:
mypkg.doSomething(
id OUT int,
name IN String,
date IN Date
)
He encontradoCallableStatementCreator
enfoques basados donde tenemos que registrar explícitamenteIN
yOUT
parámetros. Considere el siguiente método enJdbcTemplate
clase
public Map<String, Object> call(CallableStatementCreator csc, List<SqlParameter> declaredParameters)
Por supuesto, sé que puedo usarlo así:
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);
Cual es el proposito dedeclaredParameters
cuando ya los estoy registrando en micsc
implementación? En otras palabras, ¿por qué tendría que pasar unacsc
cuando la primavera simplemente puede hacercon.prepareCall(sql)
internamente? Básicamente, ¿no puedo pasar ninguno de ellos en lugar de los dos?
O, ¿hay una manera mucho mejor de llamar a los procedimientos almacenados (usando Spring JDBC Template) que lo que he encontrado hasta ahora?
Nota Puede encontrar muchas preguntas que parecen tener un título similar pero no son las mismas que esta.