Pozivanje pohranjenih procedura iz JPA spremišta proljetnih podataka
1. Pregled
Pohranjena procedura je skupina unaprijed definiranih SQL izraza pohranjenih u bazi podataka. U Javi postoji nekoliko načina za pristup pohranjenim procedurama. U ovom uputstvu pokazat ćemo kako pozvati pohranjene procedure iz spremišta Spring Data JPA.
2. Postavljanje projekta
U ovom vodiču, koristit ćemo Spring Boot Starter Data JPA modul kao sloj pristupa podacima. Također ćemo koristiti MySQL kao našu pozadinsku bazu podataka. Stoga će nam u našem projektu trebati ovisnosti Spring Data JPA, Spring Data JDBC i MySQL Connector pom.xml datoteka:
org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-data-jdbc mysql mysql-konektor-java
Jednom kada imamo definiciju ovisnosti MySQL, možemo konfigurirati vezu baze podataka u primjena.svojstva datoteka:
spring.datasource.url = jdbc: mysql: // localhost: 3306 / baeldung spring.datasource.username = baeldung spring.datasource.password = baeldung
3. Entitetska klasa
U Spring Data JPA entitet predstavlja tablicu pohranjenu u bazi podataka. Stoga možemo konstruirati klasu entiteta za mapiranje automobil tablica baze podataka:
@ Entity javni razred automobila {@Id @GeneratedValue (strategija = GenerationType.IDENTITY) @Column private long id; Model privatnog niza @ stupca; @Column private Integer godina; // standardni geteri i postavljači}
4. Stvaranje pohranjene procedure
Pohranjeni postupak može imati parametre kako bismo na temelju unosa mogli dobiti različite rezultate. Na primjer, možemo stvoriti pohranjenu proceduru koja uzima ulazni parametar cijelog broja i vraća popis automobila:
STVORI POSTUPAK FIND_CARS_AFTER_YEAR (IN year_in INT) POČNITE ODABERITI * IZ automobila GDJE godina> = year_in REDI PO GODINI; KRAJ
Pohranjeni postupak također može koristiti izlazne parametre za vraćanje podataka aplikacijama koje pozivaju. Na primjer, možemo stvoriti pohranjenu proceduru koja uzima ulazni parametar tipa niza i pohranjuje rezultat upita u izlazni parametar:
STVORI POSTUPAK GET_TOTAL_CARS_BY_MODEL (U model_in VARCHAR (50), OUT count_out INT) POČNITE ODABRATI COUNT (*) u count_out iz automobila WHERE model = model_in; KRAJ
5. Referentne pohranjene procedure u spremištu
U Spring Data JPA, spremišta su mjesta gdje pružamo operacije s bazama podataka. Stoga možemo izraditi spremište za operacije baze podataka na Automobil entitet i reference pohranjene procedure u ovom spremištu:
Javno sučelje @Repository CarRepository proširuje JpaRepository {// ...}
Dalje, dodajmo neke metode u naše spremište koje pozivaju pohranjene procedure.
5.1. Izravno mapirajte naziv pohranjene procedure
Metodu pohranjene procedure možemo definirati pomoću @Postupak napomena i izravno mapirajte naziv pohranjene procedure.
Postoje četiri jednaka načina za to. Na primjer, ime pohranjene procedure možemo koristiti izravno kao naziv metode:
@Procedure int GET_TOTAL_CARS_BY_MODEL (model niza);
Ako želimo definirati drugo ime metode, možemo spremljeni naziv procedure staviti kao element @Postupak napomena:
@Procedure ("GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModel (model niza);
Također možemo koristiti procedureName atribut za mapiranje imena pohranjene procedure:
@Procedure (procedureName = "GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModelProcedureName (model niza);
Slično tome, možemo koristiti vrijednost atribut za mapiranje imena pohranjene procedure:
@Procedure (value = "GET_TOTAL_CARS_BY_MODEL") int getTotalCarsByModelValue (model niza);
5.2. Navedite pohranjeni postupak definiran u entitetu
Također možemo koristiti @NamedStoredProcedureQuery napomena za definiranje pohranjene procedure u klasi entiteta:
@Entity @NamedStoredProcedureQuery (name = "Car.getTotalCardsbyModelEntity", procedureName = "GET_TOTAL_CARS_BY_MODEL", parametri = {@StoredProcedureParameter (mode = ParameterMode.IN, name = "model_in", typeP = ParametarSingra, P .OUT, name = "count_out", type = Integer.class)}) javni razred automobila {// definicija klase}
Zatim se na ovu definiciju možemo pozvati u spremištu:
@Procedure (name = "Car.getTotalCardsbyModelEntity") int getTotalCarsByModelEntiy (@Param ("model_in") Model niza);
Koristimo Ime atribut za referencu na pohranjenu proceduru definiranu u klasi entiteta. Za metodu spremišta koristimo @Param kako bi odgovarao ulaznom parametru pohranjene procedure. Također, izlazni parametar pohranjene procedure podudaramo s povratnom vrijednošću metode spremišta.
5.3. Navedite pohranjeni postupak sa @Query Bilješka
Također možemo nazvati pohranjenu proceduru izravno s @Query napomena:
@Query (value = "CALL FIND_CARS_AFTER_YEAR (: year_in);", nativeQuery = true) Popis findCarsAfterYear (@Param ("year_in") Integer year_in);
U ovoj metodi koristimo izvorni upit za pozivanje pohranjene procedure. Upit pohranjujemo u vrijednost atribut bilješke.
Slično tome, koristimo @Param kako bi odgovarao ulaznom parametru pohranjene procedure. Također, mapiramo izlaz pohranjene procedure na popis entiteta Automobil predmeta.
6. Sažetak
U ovom smo uputstvu pokazali kako pristupiti pohranjenim procedurama putem JPA spremišta. Također, razgovarali smo o dva jednostavna načina referenciranja pohranjenih postupaka u JPA spremištima.
Kao i uvijek, izvorni kôd članka dostupan je na GitHubu.