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.

Respuestas a la pregunta(8)

Su respuesta a la pregunta