logo

Spring Boot JPA

čo je JPA?

Spring Boot JPA je špecifikácia Java pre správu vzťahový údaje v aplikáciách Java. Umožňuje nám pristupovať a uchovávať údaje medzi objektom/triedou Java a relačná databáza. Nasleduje JPA Objektovo-relačné mapovanie (ORM). Je to súbor rozhraní. Poskytuje tiež runtime EntityManager API na spracovanie dotazov a transakcií na objektoch oproti databáze. Používa platformovo nezávislý objektovo orientovaný dotazovací jazyk JPQL (Java Persistent Query Language).

V kontexte perzistencie pokrýva tri oblasti:

  • Java Persistence API
  • Objektovo-relačnémetaúdaje
  • Samotné API, definované v vytrvalosť balík

JPA nie je rámec. Definuje koncept, ktorý môže byť implementovaný akýmkoľvek rámcom.

Prečo by sme mali používať JPA?

JPA je jednoduchší, čistejší a menej náročný na prácu ako JDBC, SQL a ručne písané mapovanie. JPA je vhodný pre komplexné aplikácie, ktoré nie sú orientované na výkon. Hlavnou výhodou JPA oproti JDBC je, že v JPA sú dáta reprezentované objektmi a triedami, zatiaľ čo v JDBC sú dáta reprezentované tabuľkami a záznamami. Používa POJO na reprezentáciu trvalých údajov, ktoré zjednodušujú programovanie databázy. Existuje niekoľko ďalších výhod JPA:

  • JPA sa vyhýba písaniu DDL v databázovom špecifickom dialekte SQL. Namiesto toho umožňuje mapovanie v XML alebo pomocou Java anotácií.
  • JPA nám umožňuje vyhnúť sa písaniu DML v dialekte SQL špecifickom pre databázu.
  • JPA nám umožňuje ukladať a načítať Java objekty a grafy bez akéhokoľvek jazyka DML.
  • Keď potrebujeme vykonať dopyty JPQL, umožňuje nám to vyjadriť dopyty v entitách Java a nie v (natívnej) tabuľke a stĺpcoch SQL.

Funkcie JPA

JPA má nasledujúce vlastnosti:

  • Je to výkonné úložisko a zvyk abstrakcia objektového mapovania.
  • Podporuje pre vytrvalosť medzi obchodmi . To znamená, že entita môže byť čiastočne uložená v MySQL a Neo4j (Graph Database Management System).
  • Dynamicky generuje dotazy z názvu metód dotazov.
  • Základné triedy domény poskytujú základné vlastnosti.
  • Podporuje transparentný audit.
  • Možnosť integrácie vlastného kódu úložiska.
  • Je ľahké ho integrovať do Spring Frameworku s vlastným menným priestorom.

Architektúra JPA

JPA je zdrojom na ukladanie podnikateľských subjektov ako relačných subjektov. Ukazuje, ako definovať POJO ako entitu a ako riadiť entity so vzťahom.

Nasledujúci obrázok popisuje architektúru JPA na úrovni triedy, ktorá popisuje základné triedy a rozhrania JPA, ktorá je definovaná v pretrvávanie javaxu balík. Architektúra JPA obsahuje nasledujúce jednotky:

    Vytrvalosť:Je to trieda, ktorá obsahuje statické metódy na získanie inštancie EntityManagerFactory.EntityManagerFactory:Je to továrenská trieda EntityManager. Vytvára a spravuje viacero inštancií EntityManager.EntityManager:Je to rozhranie. Riadi operácie zotrvania na objektoch. Funguje pre inštanciu Query.Entita:Entity sú objekty trvalého uloženia ako záznam v databáze.Jednotka vytrvalosti:Definuje množinu všetkých tried entít. V aplikácii to spravujú inštancie EntityManager. Sada tried entít predstavuje údaje obsiahnuté v jednom úložisku údajov.EntityTransaction:Má a jeden na jedného vzťah s triedou EntityManager. Pre každý EntityManager sú operácie udržiavané triedou EntityTransaction.Dopyt:Je to rozhranie, ktoré implementuje každý predajca JPA na získanie relačných objektov, ktoré spĺňajú kritériá.
Spring Boot jpa

Vzťahy triedy JPA

Triedy a rozhrania, o ktorých sme hovorili vyššie, udržiavajú vzťah. Nasledujúci obrázok ukazuje vzťah medzi triedami a rozhraniami.

java polia
Spring Boot jpa
  • Vzťah medzi EntityManager a EntiyTransaction je jeden na jedného . Pre každú operáciu EntityManager existuje inštancia EntityTransaction.
  • Vzťah medzi EntityManageFactory a EntiyManager je jeden k mnohým . Je to výrobná trieda inštancie EntityManager.
  • Vzťah medzi EntityManager a Query je jeden k mnohým . Pomocou inštancie triedy EntityManager môžeme vykonať ľubovoľný počet dotazov.
  • Vzťah medzi EntityManager a Entity je jeden k mnohým . Inštancia EntityManager môže spravovať viacero entít.

Implementácie JPA

JPA je open-source API. Existujú rôzni predajcovia podnikov, ako napríklad Eclipse, RedHat, Oracle atď., ktorí poskytujú nové produkty pridaním JPA do nich. Existuje niekoľko populárnych implementačných rámcov JPA, ako napr Hibernate, EclipseLink, DataNucleus, atď. Je tiež známy ako Objektovo-relačné mapovanie (ORM) nástroj.

Objektovo-relačné mapovanie (ORM)

V ORM sa nazýva mapovanie objektov Java na databázové tabuľky a naopak Objektovo-relačné mapovanie. Mapovanie ORM funguje ako most medzi a relačná databáza (tabuľky a záznamy) a Java aplikácia (triedy a objekty).

Na nasledujúcom obrázku je vrstva ORM vrstvou adaptéra. Prispôsobuje jazyk objektových grafov jazyku SQL a relačných tabuliek.

Spring Boot jpa

Vrstva ORM existuje medzi aplikáciou a databázou. Konvertuje triedy a objekty Java tak, aby ich bolo možné uložiť a spravovať v relačnej databáze. V predvolenom nastavení sa názov, ktorý pretrváva, stane názvom tabuľky a polia sa stanú stĺpcami. Po nastavení aplikácie každý riadok tabuľky zodpovedá objektu.

Verzie JPA

Skoršie verzie EJB definujú vrstvu perzistencie kombinovanú s použitím vrstvy obchodnej logiky javax.ejb.EntityBean Rozhranie. Špecifikácia EJB zahŕňa definíciu JPA.

Pri zavádzaní EJB 3.0 bola vrstva perzistencie oddelená a špecifikovaná ako JPA 1.0 (Java Persistence API). Špecifikácie tohto API boli vydané spolu so špecifikáciami JAVA EE5 11. mája 2006 s použitím JSR 220.

V roku 2019 sa JPA premenovalo na Vytrvalosť v Jakarte . Najnovšia verzia JPA je 2.2 . Podporuje nasledujúce funkcie:

  • Java 8, dátové a časové API
  • CDI Injection v AttributeConvertes
  • Robí anotácie @Repeatable

Rozdiel medzi JPA a Hibernate

JPA: JPA je špecifikácia Java, ktorá sa používa na prístup, správu a uchovávanie údajov medzi objektom Java a relačná databáza. Je to štandardný prístup pre ORM.

Hibernácia: Ide o ľahký nástroj ORM s otvoreným zdrojom, ktorý sa používa na ukladanie objektov Java v systéme relačnej databázy. Je poskytovateľom JPA. Riadi sa spoločným prístupom, ktorý poskytuje JPA.

Nasledujúca tabuľka popisuje rozdiely medzi JPA a Hibernate.

JPA Hibernácia
JPA je a Špecifikácia Java na mapovanie relačných údajov v aplikácii Java. Hibernácia je an rámec ORM ktorý sa zaoberá perzistenciou údajov.
JPA neposkytuje žiadne implementačné triedy. Poskytuje implementačné triedy.
Používa platformovo nezávislý dotazovací jazyk tzv JPQL (Java Persistence Query Language). Používa vlastný dopytovací jazyk tzv HQL (Hibernate Query Language).
Je definovaný v javax.vytrvalosť balík. Je definovaný v org.hibernovať balík.
Je implementovaný v rôznych ORM nástrojoch ako napr Hibernate, EclipseLink, atď. Hibernácia je poskytovateľa PSD.
JPA používa EntityManager na spracovanie perzistencie údajov. In Hibernate používa Relácia na spracovanie perzistencie údajov.

Spring Boot Starter Data JPA

Spring Boot poskytuje závislosť od štartéra spring-boot-starter-data-jpa efektívne prepojiť aplikáciu Spring Boot s relatívnou databázou. Spring-boot-starter-data-jpa interne používa závislosť spring-boot-jpa.

 org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE 

Príklad Spring Boot JPA

Vytvorme aplikáciu Spring Boot, ktorá používa JPA na pripojenie k databáze. V nasledujúcom príklade sme použili databázu v pamäti Apache Derby.

Apache Derby: Je to open-source, vložené relačná databáza implementovaná výhradne v jazyku Java. Je k dispozícii pod licenciou Apache 2.0. Apache Derby má nasledujúce výhody:

  • Je ľahké ho nainštalovať, nasadiť a používať.
  • Je založený na štandardoch Java, JDBC a SQL.
  • Poskytuje vstavaný ovládač JDBC, ktorý nám umožňuje vložiť Derby do akéhokoľvek riešenia založeného na jazyku Java.
  • Podporuje tiež režim klient/server s ovládačom Derby Network Client JDBC a Derby Network Server.

Spring Boot dokáže automaticky nakonfigurovať vstavanú databázu ako napr H2, HSQL, a Derbydatabázy . Nemusíme poskytovať žiadne adresy URL pripojenia. Potrebujeme zahrnúť iba závislosť zostavenia od vstavanej databázy, ktorú chceme použiť.

V Spring Boot môžeme jednoducho integrovať databázu Apache Derby jednoduchým pridaním Derby závislosť v súbore pom.xml.

 org.apache.derby derby runtime 

Krok 1: Open Spring Initializr https://start.spring.io/ .

Krok 2: Vyberte najnovšiu verziu Spring Boot 2.3.0 (SNÍMKA)

Krok 3: Poskytnite Skupina názov. Poskytli sme com.javatpoint.

Krok 4: Poskytnite Artefakt Id. Poskytli sme apache-derby-priklad .

Krok 5: Pridajte závislosti: Spring Web, Spring Data JPA, a Databáza Apache Derby .

Krok 6: Klikni na Generovať tlačidlo. Keď klikneme na tlačidlo Generovať, zabalí projekt do súboru Jar a stiahne ho do lokálneho systému.

Spring Boot jpa

Krok 7: Extrahujte súbor Jar a vložte ho do pracovného priestoru STS.

Krok 8: Import priečinok projektu do STS.

Súbor -> Import -> Existujúce projekty Maven -> Prehľadávať -> Vyberte priečinok apache-derby-example -> Dokončiť

Import trvá nejaký čas.

Krok 9: Vytvorte balík s názvom com.javatpoint.model v priečinku src/main/java.

Krok 10: Vytvorte triedu s názvom UserRecord v balíku com.javatpoint.model a urobte nasledovné:

  • Definujte tri premenné id, meno, a e-mailom .
  • Generovať getterov a setra.
    Kliknite pravým tlačidlom myši na súbor -> Zdroj -> Generovať získavače a nastavovače
  • Definujte predvolený konštruktor.
  • Označte triedu ako an Entita pomocou anotácie @Entity.
  • Marka Id ako primárny kľúč pomocou anotácie @Id.

UserRecord.java

 package com.javatpoint.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } 

Krok 11: Vytvorte balík s názvom com.javatpoint.controller v priečinku src/main/java.

Krok 12: Vytvorte triedu Controller s názvom UserController v balíku com.javatpoint.controller a urobte nasledovné:

  • Označte triedu ako kontrolór pomocou anotácie @RestController.
  • Automaticky zapojené do triedy UserService pomocou anotácie @Autowired .
  • Definovali sme dve zobrazenia, jedno pre získanie všetkých používateľov a druhý pre pridať používateľa.

UserController.java

 package com.javatpoint.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.javatpoint.model.UserRecord; import com.javatpoint.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping('/') public List getAllUser() { return userService.getAllUsers(); } @RequestMapping(value='/add-user', method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } } 

Krok 13: Vytvorte balík s názvom com.javatpoint.service v priečinku src/main/java.

Krok 14: Vytvorte triedu služby s názvom UserService v balíku com.javatpoint.service a urobte nasledovné:

  • Označte triedu ako službu pomocou anotácie @Služba.
  • Automaticky zapojené UserRepository
  • Definujte metódu getAllUsers() ktorý vráti zoznam
  • Definujte iný názov metódy addUser() ktorý uloží užívateľský záznam.

UserService.java

 package com.javatpoint.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javatpoint.model.UserRecord; import com.javatpoint.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { ListuserRecords = new ArrayList(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } } 

Krok 15: Vytvorte balík s názvom com.javatpoint.repository v priečinku src/main/java.

Krok 16: Vytvorte rozhranie úložiska s názvom UserRepository v balíku com.javatpoint.repository a predlžuje sa CrudRepository .

typy sietí

UserRepository.java

 package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { } 

Krok 17: Teraz otvorte ApacheDerbyExampleApplication.java súbor. Štandardne sa vytvorí, keď nastavíme aplikáciu.

ApacheDerbyExampleApplication.java

 package com.javatpoint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } } 

Teraz máme nastavené všetky potrebné triedy a balíčky podľa požiadaviek. Všimnite si, že sme žiadne neposkytli URL pripojenia pre databázu. Po dokončení všetkých vyššie uvedených krokov bude adresár projektu vyzerať takto:

Spring Boot jpa

Spustíme aplikáciu.

Krok 18: Otvor ApacheDerbyExampleApplication.java súbor a spustite ho ako aplikáciu Java.

Krok 19: Otvorte prehliadač a vyvolajte URL http://localhost:8080/. Vráti prázdny zoznam, pretože sme do zoznamu nepridali žiadneho používateľa.

Ak chcete pridať používateľa do databázy, pošleme vám a POST požiadať pomocou Poštár .

Krok 20: Otvor Poštár a urobte nasledovné:

  • Vyberte POST
  • Vyvolajte adresu URL http://localhost:8080/add-user.
  • Klikni na Telo
  • Vyberte Content-Type as JSON (aplikácia/json).
  • Vložte údaje, ktoré chcete vložiť do databázy. Vložili sme nasledujúce údaje:
 { 'id': '001', 'name': 'Tom', 'email': '[email protected]' } 
  • Klikni na Odoslať tlačidlo.
Spring Boot jpa

Keď klikneme na tlačidlo Odoslať, zobrazí sa Stav: 200 OK . Znamená to, že požiadavka bola úspešne vykonaná.

Krok 21: Otvorte prehliadač a vyvolajte URL http://localhost:8080. Vráti používateľa, ktorého sme vložili do databázy.

Spring Boot jpa
Stiahnite si príklad projektu Apache derby