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.