logo

Spring Boot JPA

Š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
  • Objektno-relacijskimetapodaci
  • 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:

    Upornost:To je klasa koja sadrži statičke metode za dobivanje instance EntityManagerFactory.EntityManagerFactory:To je tvornička klasa EntityManager-a. Stvara i upravlja višestrukim instancama EntityManagera.Upravitelj entiteta:To je sučelje. Kontrolira operacije postojanosti na objektima. Radi za instancu upita.Entitet:Entiteti su postojani objekti pohranjeni kao zapis u bazi podataka.Jedinica postojanosti:Definira skup svih klasa entiteta. U aplikaciji, EntityManager instance upravljaju njime. Skup klasa entiteta predstavlja podatke sadržane unutar jedne pohrane podataka.EntityTransaction:Ono ima jedan na jedan odnos s klasom EntityManager. Za svaki EntityManager, operacije se održavaju pomoću klase EntityTransaction.Upit:To je sučelje koje implementira svaki JPA dobavljač za dobivanje relacijskih objekata koji zadovoljavaju kriterije.
Spring Boot jpa

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.

Spring Boot jpa
  • 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
Spring Boot jpa

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.

Spring Boot jpa

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:

Spring Boot jpa

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.
Spring Boot jpa

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.

Spring Boot jpa
Preuzmite primjer projekta Apache derby