Я создал несколько реализаций хранимых процедур (PostgreSQL) с использованием Spring, как показано ниже.Код работает нормально
import com.ebooks.domain.BaseBookDto;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.NamedStoredProcedureQuery;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceContext;
import javax.persistence.StoredProcedureParameter;
import javax.persistence.StoredProcedureQuery;
import java.io.Serializable;
@Repository
@NamedStoredProcedureQuery(
name = "register_book",
procedureName = "register_book",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, type = String.class, name = "p_title"),
@StoredProcedureParameter(mode = ParameterMode.IN, type = String.class, name = "p_image_url"),
@StoredProcedureParameter(mode = ParameterMode.IN, type = String.class, name = "p_description"),
@StoredProcedureParameter(mode = ParameterMode.IN, type = Integer.class, name = "p_category_id"),
@StoredProcedureParameter(mode = ParameterMode.IN, type = Integer.class, name = "p_quantity")
}
)
public class AddBookProc implements Serializable {
@PersistenceContext
private EntityManager manager;
public boolean addNewBook(BaseBookDto bookDetails) {
try
{
StoredProcedureQuery query = manager.createStoredProcedureQuery("register_book")
.registerStoredProcedureParameter(0 , String.class , ParameterMode.IN)
.registerStoredProcedureParameter(1 , String.class, ParameterMode.IN)
.registerStoredProcedureParameter(2 , String.class, ParameterMode.IN)
.registerStoredProcedureParameter(3 , Integer.class, ParameterMode.IN)
.registerStoredProcedureParameter(4 , Integer.class, ParameterMode.IN);
query.setParameter(0, bookDetails.getTitle())
.setParameter(1, bookDetails.getImageUrl())
.setParameter(2, bookDetails.getDescription())
.setParameter(3, bookDetails.getCategoryId())
.setParameter(4, bookDetails.getQuantity());
query.execute();
}
catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
Одна проблема, которая возникла у меня, заключается в том, что если у нас есть 20-30 хранимых процедур, мне нужно создать эти 20-30 реализаций, как показано ниже.Одна мысль, которая пришла мне в голову, состоит в том, что мы можем создать универсальную оболочку для показанной выше реализации, как показано ниже
public interface BookDao {
@SpocQuery("register_book")
boolean addNewBook(String title, String imageUrl, String description, Integer categoryId, Integer quantity) throws SQLException;
@SpocQuery("get_books_list")
List<Book> getBookList() throws SQLException;
:
:
}
Если это возможно, может кто-нибудь дать мне несколько идей, как этого достичь