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