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.


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