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.


$config[zx-auto] not found$config[zx-overlay] not found