Kaj je JPA?
Pomladni zagon JPA je specifikacija Java za upravljanje relacijski podatkov v aplikacijah Java. Omogoča nam dostop in ohranjanje podatkov med objektom/razredom Java in relacijsko bazo podatkov. JPA sledi Preslikava objektnih odnosov (ORM). Je niz vmesnikov. Zagotavlja tudi čas izvajanja EntityManager API za obdelavo poizvedb in transakcij na objektih v bazi podatkov. Uporablja od platforme neodvisen objektno usmerjen poizvedovalni jezik JPQL (Java Persistent Query Language).
V okviru vztrajnosti pokriva tri področja:
- Java Persistence API
- Sam API, opredeljen v vztrajnost paket
JPA ni okvir. Določa koncept, ki ga je mogoče implementirati s katerim koli okvirom.
Zakaj bi morali uporabljati JPA?
JPA je preprostejši, čistejši in manj delovno intenziven kot JDBC, SQL in ročno napisano preslikavo. JPA je primeren za kompleksne aplikacije, ki niso usmerjene v zmogljivost. Glavna prednost JPA pred JDBC je, da so v JPA podatki predstavljeni z objekti in razredi, medtem ko so v JDBC podatki predstavljeni s tabelami in zapisi. Uporablja POJO za predstavitev trajnih podatkov, ki poenostavi programiranje baze podatkov. JPA ima še nekaj drugih prednosti:
- JPA se izogiba pisanju DDL v dialektu SQL, specifičnem za bazo podatkov. Namesto tega omogoča preslikavo v XML ali uporabo pripisov Java.
- JPA nam omogoča, da se izognemo pisanju DML v dialektu SQL, specifičnem za bazo podatkov.
- JPA nam omogoča shranjevanje in nalaganje objektov in grafov Java brez kakršnega koli jezika DML.
- Ko moramo izvesti poizvedbe JPQL, nam omogoča, da izrazimo poizvedbe v smislu entitet Java in ne (izvorne) tabele in stolpcev SQL.
Lastnosti JPA
Obstajajo naslednje značilnosti JPA:
- Je zmogljivo skladišče in po meri abstrakcija preslikave objektov.
- Podpira za vztrajnost med trgovinami . To pomeni, da je entiteto mogoče delno shraniti v MySQL in Neo4j (Graph Database Management System).
- Dinamično generira poizvedbe iz imena metod poizvedb.
- Osnovni razredi domene nudijo osnovne lastnosti.
- Podpira transparentno revizijo.
- Možnost integracije kode repozitorija po meri.
- Enostavno ga je integrirati s Spring Framework z imenskim prostorom po meri.
Arhitektura JPA
JPA je vir za shranjevanje poslovnih subjektov kot relacijskih subjektov. Pokaže, kako definirati POJO kot entiteto in kako upravljati entitete z relacijo.
Naslednja slika opisuje arhitekturo JPA na ravni razreda, ki opisuje osnovne razrede in vmesnike JPA, ki so definirani v obstojnost javaxa paket. Arhitektura JPA vsebuje naslednje enote:
JPA Razredna razmerja
Razredi in vmesniki, o katerih smo razpravljali zgoraj, ohranjajo razmerje. Naslednja slika prikazuje razmerje med razredi in vmesniki.
- Razmerje med EntityManager in EntiyTransaction je ena proti ena . Za vsako operacijo EntityManager obstaja primerek EntityTransaction.
- Razmerje med EntityManageFactory in EntiyManager je ena proti mnogo . Je tovarniški razred za primerek EntityManager.
- Razmerje med EntityManager in Query je ena proti mnogo . Z uporabo primerka razreda EntityManager lahko izvedemo poljubno število poizvedb.
- Razmerje med EntityManager in Entity je ena proti mnogo . Primerek EntityManager lahko upravlja več entitet.
Izvedbe JPA
JPA je odprtokodni API. Obstajajo različni prodajalci podjetij, kot so Eclipse, RedHat, Oracle itd., ki nudijo nove izdelke z dodajanjem JPA. Obstaja nekaj priljubljenih implementacijskih okvirov JPA, kot je npr Hibernate, EclipseLink, DataNucleus, itd. Znan je tudi kot Preslikava objektnih odnosov (ORM) orodje.
Preslikava objektnih odnosov (ORM)
V ORM se kliče preslikava objektov Java v tabele baze podatkov in obratno Objektno-relacijsko preslikavo. Preslikava ORM deluje kot most med a relacijska baza podatkov (tabele in zapisi) in Java aplikacija (razredi in predmeti).
Na naslednji sliki je sloj ORM adapterski sloj. Prilagaja jezik objektnih grafov jeziku SQL in relacijskih tabel.
Plast ORM obstaja med aplikacijo in bazo podatkov. Razrede in objekte Java pretvori tako, da jih je mogoče shraniti in upravljati v relacijski bazi podatkov. Privzeto ime, ki ostane, postane ime tabele, polja pa postanejo stolpci. Ko je aplikacija nastavljena, vsaka vrstica tabele ustreza predmetu.
Različice JPA
Prejšnje različice EJB definirajo plast vztrajnosti v kombinaciji s plastjo poslovne logike z uporabo javax.ejb.EntityBean Vmesnik. Specifikacija EJB vključuje definicijo JPA.
Med uvedbo EJB 3.0 je bil vztrajni sloj ločen in opredeljen kot JPA 1.0 (Java Persistence API). Specifikacije tega API-ja so bile izdane skupaj s specifikacijami JAVA EE5 11. maja 2006 z uporabo JSR 220.
Leta 2019 se je JPA preimenovala v Jakarta Vztrajnost . Najnovejša različica JPA je 2.2 . Podpira naslednje funkcije:
- Java 8, podatkovni in časovni API
- Vstavljanje CDI v AttributeConvertes
- Opombe naredi @ponovljive
Razlika med JPA in Hibernate
JPA: JPA je specifikacija Java, ki se uporablja za dostop, upravljanje in ohranjanje podatkov med objektom Java in relacijsko bazo podatkov. To je standardni pristop za ORM.
Hibernacija: Je lahko, odprtokodno orodje ORM, ki se uporablja za shranjevanje objektov Java v sistemu relacijskih baz podatkov. Je ponudnik JPA. Sledi skupnemu pristopu, ki ga zagotavlja JPA.
Naslednja tabela opisuje razlike med JPA in Hibernate.
JPA | Hibernacija |
---|---|
JPA je a Java specifikacija za preslikavo relacijskih podatkov v aplikaciji Java. | Hibernacija je ogrodje ORM ki se ukvarja z obstojnostjo podatkov. |
JPA ne ponuja nobenih izvedbenih razredov. | Zagotavlja izvedbene razrede. |
Uporablja od platforme neodvisen jezik poizvedb, imenovan JPQL (Java Persistence Query Language). | Uporablja svoj jezik poizvedb, imenovan HQL (Hibernate Query Language). |
Opredeljena je v javax.persistence paket. | Opredeljena je v org.hibernate paket. |
Implementiran je v različnih orodjih ORM, kot je Hibernacija, EclipseLink, itd. | Hibernacija je ponudnik PSD. |
JPA uporablja EntityManager za ravnanje z obstojnostjo podatkov. | V Hibernate uporablja Seja za ravnanje z obstojnostjo podatkov. |
Spring Boot Starter Data JPA
Spring Boot zagotavlja zagonsko odvisnost spring-boot-starter-data-jpa za učinkovito povezovanje aplikacije Spring Boot z relacijsko bazo podatkov. Spring-boot-starter-data-jpa interno uporablja odvisnost spring-boot-jpa.
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE
Primer spomladanskega zagona JPA
Ustvarimo aplikacijo Spring Boot, ki uporablja JPA za povezavo z bazo podatkov. V naslednjem primeru smo uporabili bazo podatkov v pomnilniku Apaški derbi.
Apaški derbi: Je an odprtokodni, vdelani relacijska zbirka podatkov, ki je v celoti implementirana v Javi. Na voljo je pod licenco Apache 2.0. Apache Derby ima naslednje prednosti:
- Je enostaven za namestitev, uvajanje in uporabo.
- Temelji na standardih Java, JDBC in SQL.
- Zagotavlja vdelan gonilnik JDBC, ki nam omogoča vdelavo Derbyja v katero koli rešitev, ki temelji na Javi.
- Podpira tudi način odjemalec/strežnik z gonilnikom Derby Network Client JDBC in Derby Network Server.
Spring Boot lahko samodejno konfigurira vdelano bazo podatkov, kot je npr H2, HSQL, in Podatkovne baze Derby . Ni nam treba zagotoviti URL-jev za povezavo. Vključiti moramo samo odvisnost gradnje od vdelane baze podatkov, ki jo želimo uporabiti.
V Spring Boot lahko enostavno integriramo bazo podatkov Apache Derby samo z dodajanjem derbi odvisnost v datoteki pom.xml.
org.apache.derby derby runtime
Korak 1: Odpri Spring Initializr https://start.spring.io/ .
2. korak: Izberite najnovejšo različico programa Spring Boot 2.3.0 (POSNEK)
3. korak: Zagotovite skupina ime. Zagotovili smo com.javatpoint.
4. korak: Zagotovite Artefakt Id. Zagotovili smo apache-derby-primer .
5. korak: Dodajte odvisnosti: Spring Web, Spring Data JPA, in Baza podatkov Apache Derby .
6. korak: Kliknite na Ustvari gumb. Ko kliknemo na gumb Generate, zavije projekt v datoteko Jar in jo prenese v lokalni sistem.
7. korak: Izvleček datoteko Jar in jo prilepite v delovni prostor STS.
8. korak: uvozite mapo projekta v STS.
Datoteka -> Uvoz -> Obstoječi projekti Maven -> Prebrskaj -> Izberite mapo apache-derby-example -> Dokončaj
Uvoz traja nekaj časa.
9. korak: Ustvarite paket z imenom com.javatpoint.model v mapi src/main/java.
10. korak: Ustvarite razred z imenom UserRecord v paketu com.javatpoint.model in naredite naslednje:
- Določite tri spremenljivke id, ime, in E-naslov .
- Ustvarite Getters in Setter.
Z desno miškino tipko kliknite datoteko -> Izvor -> Generate Getters and Setters - Določite privzeti konstruktor.
- Označite razred kot Entiteta z uporabo opombe @Entiteta.
- Mark Id kot primarni ključ z uporabo opombe @Id.
UserRecord.java
podniz 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; } }
11. korak: Ustvarite paket z imenom com.javatpoint.controller v mapi src/main/java.
12. korak: Ustvarite razred krmilnika z imenom Uporabniški krmilnik v paketu com.javatpoint.controller in naredite naslednje:
- Z opombo označite razred kot krmilnik @RestController.
- Samodejno ožičenje razreda UserService z uporabo opombe @Autowired .
- Definirali smo dve preslikavi, eno za pridobivanje vseh uporabnikov in drugi za dodajanje uporabnika.
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); } }
13. korak: Ustvarite paket z imenom com.javatpoint.service v mapi src/main/java.
14. korak: Ustvarite servisni razred z imenom UserService v paketu com.javatpoint.service in naredite naslednje:
- Z opombo označite razred kot storitev @Storitev.
- Samodejno ožičenje UserRepository
- Določite metodo getAllUsers() ki vrne seznam
- Določite drugo ime metode addUser() ki shrani zapis uporabnika.
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); } }
15. korak: Ustvarite paket z imenom com.javatpoint.repository v mapi src/main/java.
16. korak: Ustvarite vmesnik skladišča z imenom UserRepository v paketu com.javatpoint.repository in se razteza CrudRepository .
UserRepository.java
package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { }
17. korak: Zdaj odprite ApacheDerbyExampleApplication.java mapa. Privzeto se ustvari, ko nastavimo aplikacijo.
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); } }
Zdaj smo nastavili vse potrebne razrede in pakete v skladu z zahtevami. Upoštevajte, da nismo zagotovili nobenega URL povezave za bazo podatkov. Po zaključku vseh zgornjih korakov je imenik projekta videti takole:
Zaženimo aplikacijo.
18. korak: Odprite ApacheDerbyExampleApplication.java datoteko in jo zaženite kot aplikacijo Java.
19. korak: Odprite brskalnik in pokličite URL http://localhost:8080/. Vrne prazen seznam, ker na seznam nismo dodali nobenega uporabnika.
Za dodajanje uporabnika v bazo podatkov bomo poslali a OBJAVI zahtevo z uporabo Poštar .
20. korak: Odprite Poštar in naredite naslednje:
- Izberite OBJAVI
- Prikličite URL http://localhost:8080/add-user.
- Kliknite na Telo
- Izberite Content-Type kot JSON (aplikacija/json).
- Vstavite podatke, ki jih želite vstaviti v bazo podatkov. Vnesli smo naslednje podatke:
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- Kliknite na Pošlji gumb.
Ko kliknemo na gumb Pošlji, se prikaže Stanje: 200 OK . To pomeni, da je bila zahteva uspešno izvedena.
21. korak: Odprite brskalnik in pokličite URL http://localhost:8080. Vrne uporabnika, ki smo ga vstavili v bazo podatkov.
Prenesite primer projekta Apache derby