Tárolt eljárások hívása a tavaszi adatgyűlésről

1. Áttekintés

A tárolt eljárás az adatbázisban tárolt előre definiált SQL utasítások csoportja. A Java-ban többféle módon lehet hozzáférni a tárolt eljárásokhoz. Ebben az oktatóanyagban megmutatjuk, hogyan hívhatjuk meg a tárolt eljárásokat a Spring Data JPA adattárakból.

2. Projekt beállítása

Ebben az oktatóanyagban a Spring Boot Starter Data JPA modult fogjuk használni az adatelérési rétegként. A MySQL-t háttér-adatbázisként is használjuk. Ezért projektünkben szükségünk lesz a Spring Data JPA, a Spring Data JDBC és a MySQL Connector függőségekre pom.xml fájl:

 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-data-jdbc mysql mysql-connector-java 

Miután megvan a MySQL függőség definíciója, konfigurálhatjuk az adatbázis kapcsolatot az alkalmazás.tulajdonságok fájl:

spring.datasource.url = jdbc: mysql: // localhost: 3306 / baeldung spring.datasource.username = baeldung spring.datasource.password = baeldung

3. Entitásosztály

A Spring Data JPA-ban az entitás egy adatbázisban tárolt táblázatot képvisel. Ezért elkészíthetünk egy entitásosztályt a térkép feltérképezéséhez autó adatbázis táblázat:

@Entity public class Car {@Id @GeneratedValue (strategy = GenerationType.IDENTITY) @Column private long id; @Column private String modell; @Column privát Egész év; // szabványos mérőeszközök és beállítók}

4. Tárolt eljárás létrehozása

A tárolt eljárásnak lehetnek paraméterei hogy a bemenet alapján különböző eredményeket kaphassunk. Például létrehozhatunk egy tárolt eljárást, amely egész típusú bemeneti paramétert vesz fel, és visszaadja az autók listáját:

ELJÁRÁS LÉTREHOZÁSA FIND_CARS_AFTER_YEAR (IN-ben / INT-ben) KEZDJE KIVÁLASZTANI * FROM car WHERE év> = year_in ORDER BY year; VÉGE

Tárolt eljárás kimeneti paraméterekkel is visszaadhatja az adatokat a hívó alkalmazásokhoz. Például létrehozhatunk egy tárolt eljárást, amely egy string típusú bemeneti paramétert vesz fel, és a lekérdezés eredményét egy kimeneti paraméterbe tárolja:

LÉTREHOZÁSI ELJÁRÁS GET_TOTAL_CARS_BY_MODEL (IN model_in VARCHAR (50), OUT count_out INT) BEGIN SELECT COUNT (*) into count_out from car WHERE model = model_in; VÉGE

5. Referencia tárolt eljárások a tárban

A Spring Data JPA-ban az adattárak jelentik az adatbázis-műveleteket. Ezért létrehozhatunk egy adattárat a. Adatbázis-műveleteihez Autó entitás és referencia a tárolóban tárolt eljárások:

@Repository nyilvános felület A CarRepository kiterjeszti a JpaRepository-t {// ...} 

Ezután adjunk hozzá néhány módszert a tárunkba, amelyek tárolt eljárásokat hívnak meg.

5.1. A tárolt eljárás nevének közvetlen leképezése

Megadhatunk egy tárolt eljárásmódot a @Procedure annotációval és közvetlenül leképezheti a tárolt eljárás nevét.

Ennek négyféle módja van. Például a tárolt eljárás nevét közvetlenül használhatjuk metódus névként:

@Procedure int GET_TOTAL_CARS_BY_MODEL (karakterlánc modell); 

Ha egy másik metódusnevet akarunk definiálni, akkor a tárolt eljárás nevét felvehetjük elemként @Procedure kommentár:

@Procedure ("GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModel (karakterlánc modell); 

Használhatjuk a eljárásNév attribútum a tárolt eljárás nevének feltérképezéséhez:

@Procedure (procedureName = "GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModelProcedureName (karakterlánc-modell); 

Hasonlóképpen használhatjuk a érték attribútum a tárolt eljárás nevének feltérképezéséhez:

@Procedure (value = "GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModelValue (karakterlánc-modell); 

5.2. Hivatkozás az entitásban definiált tárolt eljárásra

Használhatjuk a @NamedStoredProcedureQuery kommentár egy tárolt eljárás meghatározásához az entitásosztályban:

@Entity @NamedStoredProcedureQuery (név = "Car.getTotalCardsbyModelEntity", procedureName = "GET_TOTAL_CARS_BY_MODEL", paraméterek = {@StoredProcedureParameter (mode = ParameterMode.IN, name = "model_in.cl", = .OUT, name = "count_out", type = Integer.class)}) public class Car {// osztálydefiníció}

Ezután hivatkozhatunk erre a definícióra az adattárban:

@Procedure (name = "Car.getTotalCardsbyModelEntity") int getTotalCarsByModelEntiy (@Param ("model_in") karakterlánc-modell); 

Használjuk a név attribútum az entitásosztályban meghatározott tárolt eljárás hivatkozására. A lerakat módszerhez használjuk @Param hogy megfeleljen a tárolt eljárás bemeneti paraméterének. Illetve a tárolt eljárás kimeneti paraméterét a repository módszer visszatérési értékéhez illesztjük.

5.3. Tárolt eljárás hivatkozása a @Lekérdezés Megjegyzés

Tárolt eljárást hívhatunk közvetlenül is a @Lekérdezés kommentár:

@Query (value = "CALL FIND_CARS_AFTER_YEAR (: year_in);", nativeQuery = true) List findCarsAfterYear (@Param ("year_in") Integer year_in);

Ebben a módszerben natív lekérdezést használunk a tárolt eljárás meghívására. A lekérdezést a érték az annotáció attribútuma.

Hasonlóképpen használjuk @Param hogy megfeleljen a tárolt eljárás bemeneti paraméterének. Ezenkívül leképezzük a tárolt eljárás kimenetét az entitások listájára Autó tárgyakat.

6. Összefoglalás

Ebben az oktatóanyagban bemutattuk, hogyan lehet hozzáférni a tárolt eljárásokhoz a JPA adattárain keresztül. Két egyszerű módot is megvitattunk a JPA tárházaiban tárolt eljárások hivatkozására.

Mint mindig, a cikk forráskódja elérhető a GitHubon.