Шаблон Spring JDBC для вызова хранимых процедур

Как правильно вызывать хранимые процедуры с использованием современного (около 2012 года) шаблона Spring 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);

Какова цель объявленных параметров , когда я уже регистрировать их в моей реализации csc ? Другими словами, зачем мне передавать csc , когда Spring может просто выполнять con.prepareCall (sql) внутри? В принципе, нельзя ли передать любой из них вместо них обоих?

Или есть способ вызова хранимых процедур (с использованием Spring JDBC Template) намного лучше, чем то, что я встречал до сих пор?

] Примечание: Вы можете найти много вопросов с похожим заголовком, но не такими, как этот.

69
задан Vishnu 27 March 2015 в 08:04
поделиться