Почему бы не использовать Абстракцию DAO Spring (очень полезная и достаточно легкая библиотека вокруг необработанного JDBC, которая устраняет необходимость в шаблонном коде), вы можете создать подкласс StoredProcedure
класса.
class MySproc extends StoredProcedure {
public MySproc(DataSource ds) {
super(" { exec MY_SPROC ?, ? }", ds);
declare(new SqlParameter("p1", Types.VARCHAR));
declare(new SqlParameter("p2", Types.INT));
}
public void execute(String p1, int p2) {
Map m = new HashMap();
m.put("p1", p1);
m.put("p2", p2);
super.execute(m);
}
}
Тогда это выполняется очень просто следующим образом:
new MySproc(ds).execute("Hello", 12);
Без базы данных Connection
с, CallableStatement
с в любом месте, чтобы увидеть. Прекрасный! О да, и он также предоставляет аннотации на основе Transaction
s.
Если ваш sproc возвращает таблицу, это невероятно легко с помощью Spring. Просто объявите:
declare(new SqlReturnResultSet("rs", mapper));
Где mapper
- это экземпляр, который преобразует строку ResultSet
в нужный объект. Затем измените свою строку:
Map out = super.execute(m);
return (Collection) out.get("rs");
Возвращаемое Collection
будет содержать экземпляры объектов, созданных вашей реализацией mapper
.