Как использовать хранимую процедуру Spring с хранилищем данных Spring
Может кто-нибудь объяснить, можно ли использовать хранимую процедуру Spring с репозиторием Spring Crud или пейджинговым репозиторием, по крайней мере, для части извлечения данных?
Я пытаюсь интегрировать существующий код, который использует хранимую процедуру Spring с репозитория Spring. но я не хочу использовать JPA.
2 ответа
Не существует официального модуля Spring Data, который работает напрямую с jdbc без JPA.
Но есть проект с открытым исходным кодом https://github.com/jirutka/spring-data-jdbc-repository который пытается это сделать, хотя выглядит несколько застойным. Поскольку вы на самом деле создаете подклассы, он должен иметь возможность добавлять / переопределять методы теми, которые используют шаблон хранимой процедуры / jdbc, поскольку все, что вам нужно для этого, - это DataSource.
Вы можете вызвать хранимую процедуру в Spring Data JPA, как показано ниже
Сначала объявите хранимую процедуру в сущности
@Entity
@Table(name = "MY_TABLE")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "proc_with_input",
procedureName = "pkg.proc_with_input",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "inputParam", type = String.class)
}),
@NamedStoredProcedureQuery(name = "proc_with_input_output",
procedureName = "pkg.proc_with_input_output",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "inputParam", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "outputParam", type = String.class)
})
})
public class MyTable implements Serializable {
// Table properties
// Setters and Getters
}
Вызов процедур в интерфейсе репозитория JPA, как показано ниже.
public interface MyTableRepository extends CrudRepository<MyTable, Long> {
@Procedure(name = "proc_with_input")
public void inOnlyTest(@Param("inputParam") String inputParam);
@Procedure(name = "proc_with_input_output")
public String inAndOutTest(@Param("inputParam") String inputParam);
}