Каков правильный способ вызова хранимых процедур с использованием современного дня (около 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);
Какова цель declaredParameters
, когда я уже регистрирую их в своей реализации csc
? Другими словами, зачем мне нужно переходить в csc
, когда Spring может просто сделать con.prepareCall(sql)
внутренне? В принципе, я не могу пройти ни в одном из них, ни в обоих из них?
Или есть гораздо лучший способ вызвать хранимые процедуры (используя Spring JDBC Template), чем то, к чему я до сих пор сталкивался?
Примечание. Вы можете найти много вопросов, которые, как представляется, имеют похожий заголовок, но они не совпадают с этим.