Volanie uložených procedúr z archívov JPA Spring Data
1. Prehľad
Uložená procedúra je skupina preddefinovaných príkazov SQL uložených v databáze. V prostredí Java existuje niekoľko spôsobov prístupu k uloženým procedúram. V tomto tutoriáli si ukážeme, ako zavolať uložené procedúry z Spring Data JPA Repositories.
2. Nastavenie projektu
V tomto návode ako vrstvu prístupu k údajom použijeme modul Spring Boot Starter Data JPA. My tiež použijeme MySQL ako svoju backendovú databázu. Preto v našom projekte budeme potrebovať závislosti Spring Data JPA, Spring Data JDBC a MySQL Connector pom.xml spis:
org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-data-jdbc mysql mysql-konektor-java
Keď máme definíciu závislosti MySQL, môžeme nakonfigurovať databázové pripojenie v application.properties spis:
spring.datasource.url = jdbc: mysql: // localhost: 3306 / baeldung spring.datasource.username = baeldung spring.datasource.password = baeldung
3. Trieda entity
V Spring Data JPA predstavuje entita tabuľku uloženú v databáze. Preto môžeme zostaviť triedu entít na mapovanie auto tabuľka databázy:
@Entity public class Car {@Id @GeneratedValue (strategy = GenerationType.IDENTITY) @Column private long id; @Sloupcový súkromný reťazcový model; @ Stĺpec súkromné celé číslo rok; // štandardné getre a setre}
4. Vytvorenie uloženej procedúry
Uložená procedúra môže mať parametre aby sme na základe vstupu mohli získať rôzne výsledky. Napríklad môžeme vytvoriť uloženú procedúru, ktorá prevezme vstupný parameter celočíselného typu a vráti zoznam automobilov:
VYTVORIŤ POSTUP FIND_CARS_AFTER_YEAR (IN year_in INT) ZAČAŤ VYBERAŤ * Z auta KDE rok> = year_in OBJEDNAŤ ZA ROK; KONIEC
Uložená procedúra môže tiež použiť výstupné parametre na vrátenie údajov k volajúcim aplikáciám. Napríklad môžeme vytvoriť uloženú procedúru, ktorá prevezme vstupný parameter typu reťazca a výsledok dotazu uloží do výstupného parametra:
VYTVORIŤ POSTUP GET_TOTAL_CARS_BY_MODEL (IN model_in VARCHAR (50), OUT count_out INT) ZAČNITE VYBERAŤ COUNT (*) do count_out z auta KDE model = model_in; KONIEC
5. Referenčné uložené procedúry v úložisku
V Spring Data JPA sú úložiská miestom, kde poskytujeme databázové operácie. Preto môžeme vytvoriť úložisko pre databázové operácie na serveri Auto entita a odkaz na uložené procedúry v tomto úložisku:
@Repository verejné rozhranie CarRepository rozširuje JpaRepository {// ...}
Ďalej pridajme do nášho úložiska niektoré metódy, ktoré volajú uložené procedúry.
5.1. Mapujte priamo uložený názov procedúry
Metódu uloženej procedúry môžeme definovať pomocou @ Postup anotáciu a priamo namapujte názov uloženej procedúry.
Existujú štyri rovnocenné spôsoby, ako to dosiahnuť. Napríklad môžeme názov uloženej procedúry použiť priamo ako názov metódy:
@Procedure int GET_TOTAL_CARS_BY_MODEL (reťazcový model);
Ak chceme definovať iný názov metódy, môžeme vložiť názov uloženej procedúry ako prvok @ Postup anotácia:
@Procedure ("GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModel (reťazcový model);
Môžeme tiež použiť postupName atribút na mapovanie názvu uloženej procedúry:
@Procedure (procedureName = "GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModelProcedureName (reťazcový model);
Podobne môžeme použiť hodnotu atribút na mapovanie názvu uloženej procedúry:
@Procedure (value = "GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModelValue (reťazcový model);
5.2. Odkázajte na uloženú procedúru definovanú v entite
Môžeme tiež použiť @NamedStoredProcedureQuery anotácia na definovanie uloženej procedúry v triede entít:
@Entity @NamedStoredProcedureQuery (name = "Car.getTotalCardsbyModelEntity", procedureName = "GET_TOTAL_CARS_BY_MODEL", parametre = {@StoredProcedureParameter (mode = ParameterMode.IN, name = "model_in", type = String.class) = .OUT, name = "count_out", type = Integer.class)}) verejná trieda Auto {// definícia triedy}
Potom môžeme na túto definíciu odkazovať v úložisku:
@Procedure (name = "Car.getTotalCardsbyModelEntity") int getTotalCarsByModelEntiy (@Param ("model_in") reťazcový model);
Používame názov atribút na odkaz na uloženú procedúru definovanú v triede entity. Pre metódu úložiska používame @Param aby sa zhodoval so vstupným parametrom uloženej procedúry. Taktiež priraďujeme výstupný parameter uloženej procedúry k návratovej hodnote metódy úložiska.
5.3. Odkaz na uloženú procedúru pomocou @Dopyt Anotácia
Môžeme tiež zavolať uloženú procedúru priamo pomocou @Dopyt anotácia:
@Query (value = "CALL FIND_CARS_AFTER_YEAR (: year_in);", nativeQuery = true) List findCarsAfterYear (@Param ("year_in") Integer year_in);
V tejto metóde používame natívny dotaz na volanie uloženej procedúry. Dotaz uložíme do hodnotu atribút anotácie.
Podobne používame aj my @Param aby sa zhodoval so vstupným parametrom uloženej procedúry. Výstup uloženej procedúry tiež namapujeme na zoznam entít Auto predmety.
6. Zhrnutie
V tomto tutoriáli sme si ukázali, ako získať prístup k uloženým procedúram prostredníctvom úložísk JPA. Diskutovali sme tiež o dvoch jednoduchých spôsoboch odkazovania na uložené procedúry v úložiskách JPA.
Zdrojový kód článku je ako vždy k dispozícii na stránkach GitHub.