Який правильний спосіб викликати збережені процедури за допомогою сучасного шаблону JDBC Spring (circa 2012)?
Скажімо, у мене є збережена процедура, яка оголошує 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
реалізації? Іншими словами, чому мені потрібно здавати acsc
коли весна може просто робити con.prepareCall(sql)
всередині? В основному, чи не можу я пройти в жоден з них замість обох?
Або є набагато кращий спосіб викликати збережені процедури (за допомогою Spring JDBC Template), ніж той, з яким я стикався до цього часу?
Примітка: Ви можете знайти багато питань, які, схоже, мають подібний заголовок, але вони не збігаються з цим.