Što je JPA?
Spring Boot JPA je Java specifikacija za upravljanje relacijski podatke u Java aplikacijama. Omogućuje nam pristup i zadržavanje podataka između Java objekta/klase i relacijske baze podataka. Slijedi JPA Mapiranje objektnih odnosa (ORM). To je skup sučelja. Također pruža vrijeme izvođenja Upravitelj entiteta API za obradu upita i transakcija na objektima prema bazi podataka. Koristi objektno orijentirani jezik upita JPQL (Java Persistent Query Language) neovisan o platformi.
U kontekstu postojanosti pokriva tri područja:
- Java Persistence API
- Sam API, definiran u upornost paket
JPA nije okvir. Definira koncept koji se može implementirati bilo kojim okvirom.
Zašto bismo trebali koristiti JPA?
JPA je jednostavniji, čistiji i manje radno intenzivan od JDBC-a, SQL-a i ručno pisanog mapiranja. JPA je prikladan za složene aplikacije koje nisu orijentirane na performanse. Glavna prednost JPA u odnosu na JDBC je ta što su u JPA podaci predstavljeni objektima i klasama, dok su u JDBC podaci predstavljeni tablicama i zapisima. Koristi POJO za predstavljanje postojanih podataka koji pojednostavljuju programiranje baze podataka. Postoje neke druge prednosti JPA:
- JPA izbjegava pisanje DDL-a u dijalektu SQL-a specifičnom za bazu podataka. Umjesto toga, omogućuje mapiranje u XML-u ili korištenje Java komentara.
- JPA nam omogućuje izbjegavanje pisanja DML-a u dijalektu SQL-a specifičnom za bazu podataka.
- JPA nam omogućuje spremanje i učitavanje Java objekata i grafikona bez ikakvog DML jezika.
- Kada trebamo izvršiti upite JPQL, on nam omogućuje da izrazimo upite u smislu Java entiteta, a ne (nativne) SQL tablice i stupaca.
Značajke JPA
Postoje sljedeće značajke JPA:
- To je moćno spremište i običaj apstrakcija preslikavanja objekata.
- Podržava za ustrajnost među trgovinama . To znači da se entitet može djelomično pohraniti u MySQL i Neo4j (Graph Database Management System).
- Dinamički generira upite iz naziva metode upita.
- Bazne klase domene pružaju osnovna svojstva.
- Podržava transparentnu reviziju.
- Mogućnost integracije prilagođenog koda repozitorija.
- Lako se integrira s Spring Frameworkom s prilagođenim prostorom naziva.
JPA Arhitektura
JPA je izvor za pohranjivanje poslovnih subjekata kao relacijskih entiteta. Pokazuje kako definirati POJO kao entitet i kako upravljati entitetima s relacijom.
Sljedeća slika opisuje arhitekturu JPA na razini klase koja opisuje osnovne klase i sučelja JPA koji su definirani u javax postojanost paket. JPA arhitektura sadrži sljedeće jedinice:
Odnosi klasa JPA
Klase i sučelja o kojima smo gore govorili održavaju odnos. Sljedeća slika prikazuje odnos između klasa i sučelja.
- Odnos između EntityManager i EntiyTransaction je jedan na jedan . Za svaku EntityManager operaciju postoji instanca EntityTransaction.
- Odnos između EntityManageFactory i EntiyManager je jedan-prema-više . To je tvornička klasa za instancu EntityManager.
- Odnos između EntityManager-a i Query-a je jedan-prema-više . Možemo izvršiti bilo koji broj upita korištenjem instance klase EntityManager.
- Odnos između EntityManager i Entity je jedan-prema-više . Instanca EntityManagera može upravljati s više entiteta.
JPA implementacije
JPA je API otvorenog koda. Postoje različiti poslovni dobavljači kao što su Eclipse, RedHat, Oracle itd. koji nude nove proizvode dodavanjem JPA u njih. Postoje neki popularni JPA implementacijski okviri kao što su Hibernacija, EclipseLink, DataNucleus, itd. Poznat je i kao Mapiranje objektnih odnosa (ORM) alat.
Mapiranje objektnog odnosa (ORM)
U ORM-u se poziva preslikavanje Java objekata u tablice baze podataka i obrnuto Objektno-relacijsko preslikavanje. ORM mapiranje djeluje kao most između a relacijska baza podataka (tablice i zapisi) i Java aplikacija (klase i objekti).
Na sljedećoj slici, ORM sloj je adapterski sloj. Prilagođava jezik objektnih grafova jeziku SQL-a i relacijskih tablica.
leksikografski
ORM sloj postoji između aplikacije i baze podataka. Pretvara Java klase i objekte tako da se mogu pohraniti i njima upravljati u relacijsku bazu podataka. Prema zadanim postavkama, naziv koji postoji postaje naziv tablice, a polja postaju stupci. Nakon što se aplikacija postavi, svaki redak tablice odgovara objektu.
JPA verzije
Ranije verzije EJB-a definiraju sloj postojanosti u kombinaciji sa slojem poslovne logike korištenjem javax.ejb.EntityBean Sučelje. EJB specifikacija uključuje definiciju JPA.
Prilikom uvođenja EJB 3.0, sloj postojanosti je odvojen i specificiran kao JPA 1.0 (Java Persistence API). Specifikacije ovog API-ja objavljene su zajedno sa specifikacijama JAVA EE5 11. svibnja 2006., koristeći JSR 220.
Godine 2019. JPA je preimenovana u Jakarta Upornost . Najnovija verzija JPA je 2.2 . Podržava sljedeće značajke:
- Java 8, API za podatke i vrijeme
- CDI injekcija u AttributeConvertes
- Bilješke čini @ponovljivima
Razlika između JPA i Hibernate
JPA: JPA je Java specifikacija koja se koristi za pristup, upravljanje i zadržavanje podataka između Java objekta i relacijske baze podataka. To je standardni pristup za ORM.
Hibernacija: To je lagani ORM alat otvorenog koda koji se koristi za pohranu Java objekata u sustav relacijske baze podataka. To je pružatelj JPA. Slijedi zajednički pristup koji nudi JPA.
Sljedeća tablica opisuje razlike između JPA i Hibernate.
JPA | Hibernacija |
---|---|
JPA je a Java specifikacija za mapiranje relacijskih podataka u Java aplikaciji. | Hibernacija je ORM okvir koji se bavi postojanošću podataka. |
JPA ne nudi nikakve izvedbene klase. | Omogućuje implementacijske klase. |
Koristi upitni jezik neovisan o platformi tzv JPQL (Java Persistence Query Language). | Koristi vlastiti upitni jezik tzv HQL (Hibernate Query Language). |
Definirano je u javax.postojanost paket. | Definirano je u org.hibernacija paket. |
Implementiran je u raznim ORM alatima poput Hibernacija, EclipseLink, itd. | Hibernacija je davatelj usluga od PSD-a. |
JPA koristi Upravitelj entiteta za rukovanje postojanošću podataka. | U Hibernate koristi Sjednica za rukovanje postojanošću podataka. |
Spring Boot Starter Data JPA
Spring Boot omogućuje početnu ovisnost spring-boot-starter-data-jpa za učinkovito povezivanje Spring Boot aplikacije s relacijskom bazom podataka. Spring-boot-starter-data-jpa interno koristi ovisnost spring-boot-jpa.
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE
JPA primjer proljetnog pokretanja
Kreirajmo Spring Boot aplikaciju koja koristi JPA za povezivanje s bazom podataka. U sljedećem primjeru koristili smo bazu podataka u memoriji Apaški derbi.
Apache Derby: To je open-source, ugrađen relacijska baza podataka implementirana u potpunosti u Javi. Dostupan je pod licencom Apache 2.0. Postoje sljedeće prednosti Apache Derbyja:
- Jednostavan je za instalaciju, implementaciju i korištenje.
- Temelji se na standardima Java, JDBC i SQL.
- Omogućuje ugrađeni JDBC upravljački program koji nam omogućuje ugradnju Derbyja u bilo koje rješenje temeljeno na Javi.
- Također podržava način rada klijent/poslužitelj s upravljačkim programom Derby Network Client JDBC i Derby Network Server.
Spring Boot može automatski konfigurirati ugrađenu bazu podataka kao što je H2, HSQL, i Derby baze podataka . Ne moramo dati URL-ove za povezivanje. Trebamo samo uključiti ovisnost o izgradnji o ugrađenoj bazi podataka koju želimo koristiti.
U Spring Boot-u možemo jednostavno integrirati Apache Derby bazu podataka samo dodavanjem derbi ovisnost u datoteci pom.xml.
org.apache.derby derby runtime
Korak 1: Open Spring Initializr https://start.spring.io/ .
Korak 2: Odaberite najnoviju verziju programa Spring Boot 2.3.0 (SNIMKA)
Korak 3: Osigurajte Skupina Ime. Osigurali smo com.javatpoint.
Korak 4: Osigurajte Artefakt Iskaznica. Osigurali smo apache-derby-primjer .
Korak 5: Dodajte ovisnosti: Spring Web, Spring Data JPA, i Apache Derby baza podataka .
Korak 6: Klikni na Generirati dugme. Kada kliknemo na gumb Generate, on omotava projekt u Jar datoteku i preuzima ga na lokalni sustav.
Korak 7: Ekstrakt Jar datoteku i zalijepite je u STS radni prostor.
Korak 8: Uvoz mapu projekta u STS.
Datoteka -> Uvoz -> Postojeći Maven projekti -> Pregledaj -> Odaberite mapu apache-derby-example -> Završi
Za uvoz je potrebno neko vrijeme.
Korak 9: Napravite paket s imenom com.javatpoint.model u mapi src/glavni/java.
Korak 10: Stvorite klasu s imenom UserRecord u paketu com.javatpoint.model i učinite sljedeće:
- Definirajte tri varijable id, ime, i elektronička pošta .
- Generiraj Getters i Setter.
Desnom tipkom miša kliknite na datoteku -> Izvor -> Generiraj Getters i Setters - Definirajte zadani konstruktor.
- Označite razred kao Entitet korištenjem anotacije @Entitet.
- Ocjena Iskaznica kao primarni ključ pomoću primjedbe @Iskaznica.
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; } }
Korak 11: Napravite paket s imenom com.javatpoint.kontroler u mapi src/glavni/java.
Korak 12: Stvorite klasu kontrolera s imenom korisnički kontroler u paketu com.javatpoint.kontroler i učinite sljedeće:
- Označite klasu kao kontroler pomoću napomene @RestController.
- Automatski spojio klasu UserService korištenjem anotacije @Autoožičeni .
- Definirali smo dva preslikavanja, jedno za dobivanje svih korisnika a drugi za dodati korisnika.
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); } }
Korak 13: Napravite paket s imenom com.javatpoint.service u mapi src/glavni/java.
Korak 14: Stvorite klasu usluge s imenom UserService u paketu com.javatpoint.service i učinite sljedeće:
- Označite klasu kao uslugu pomoću napomene @Servis.
- Automatski ožičen Korisničko spremište
- Definirajte metodu getAllUsers() koji vraća popis
- Definirajte drugi naziv metode addUser() koji sprema korisnički zapis.
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); } }
Korak 15: Napravite paket s imenom com.javatpoint.repozitorij u mapi src/glavni/java.
Korak 16: Stvorite sučelje repozitorija s imenom Korisničko spremište u paketu com.javatpoint.repozitorij i proteže se CrudRepository .
Korisničko spremište.java
package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { }
Korak 17: Sada otvorite ApacheDerbyExampleApplication.java datoteka. Stvara se prema zadanim postavkama kada postavljamo aplikaciju.
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); } }
Sada smo postavili sve potrebne razrede i pakete prema zahtjevima. Imajte na umu da ih nismo dostavili URL veze za bazu podataka. Nakon dovršetka svih gore navedenih koraka, direktorij projekta izgleda ovako:
Pokrenimo aplikaciju.
Korak 18: Otvori ApacheDerbyExampleApplication.java datoteku i pokrenite je kao Java aplikaciju.
Korak 19: Otvorite preglednik i pozovite URL http://localhost:8080/. Vraća prazan popis jer nismo dodali nijednog korisnika na popis.
Za dodavanje korisnika u bazu podataka, poslat ćemo a POST zahtjev pomoću Poštar .
Korak 20: Otvori Poštar i učinite sljedeće:
- Odaberite POST
- Pozovite URL http://localhost:8080/add-user.
- Klikni na Tijelo
- Odaberite Content-Type kao JSON (aplikacija/json).
- Unesite podatke koje želite umetnuti u bazu podataka. Umetnuli smo sljedeće podatke:
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- Klikni na Poslati dugme.
Kada kliknemo na gumb Pošalji, prikazuje se Status: 200 OK . To znači da je zahtjev uspješno izvršen.
Korak 21: Otvorite preglednik i pozovite URL http://localhost:8080. Vraća korisnika kojeg smo unijeli u bazu podataka.
Preuzmite primjer projekta Apache derby