logo

Spring Boot JPA

Co to jest JPA?

Spring Boot JPA to specyfikacja Java służąca do zarządzania relacyjny danych w aplikacjach Java. Umożliwia nam dostęp i utrwalanie danych pomiędzy obiektem/klasą Java a relacyjną bazą danych. WZP podąża za nim Mapowanie relacji obiektowych (ORM). Jest to zestaw interfejsów. Zapewnia także czas działania Menedżer jednostek API do przetwarzania zapytań i transakcji na obiektach względem bazy danych. Wykorzystuje niezależny od platformy obiektowy język zapytań JPQL (Java Persistent Query Language).

W kontekście wytrwałości obejmuje trzy obszary:

  • Interfejs API trwałości Java
  • Obiektowo-relacyjnymetadane
  • Sam interfejs API zdefiniowany w pliku trwałość pakiet

JPA nie jest frameworkiem. Definiuje koncepcję, którą można wdrożyć w dowolnym frameworku.

Dlaczego powinniśmy używać JPA?

JPA jest prostsza, czystsza i mniej pracochłonna niż JDBC, SQL i mapowanie pisane ręcznie. JPA nadaje się do złożonych aplikacji, które nie są zorientowane na wydajność. Główną przewagą JPA nad JDBC jest to, że w JPA dane są reprezentowane przez obiekty i klasy, podczas gdy w JDBC dane są reprezentowane przez tabele i rekordy. Wykorzystuje POJO do reprezentowania trwałych danych, co upraszcza programowanie baz danych. Istnieje kilka innych zalet JPA:

  • JPA unika pisania języka DDL w dialekcie SQL specyficznym dla bazy danych. Zamiast tego umożliwia mapowanie w formacie XML lub używanie adnotacji Java.
  • JPA pozwala nam uniknąć pisania DML w specyficznym dla bazy danych dialekcie SQL.
  • JPA pozwala nam zapisywać i ładować obiekty i wykresy Java bez żadnego języka DML.
  • Kiedy musimy wykonać zapytania JPQL, pozwala nam to wyrazić zapytania w kategoriach jednostek Java, a nie (natywnej) tabeli i kolumn SQL.

Funkcje JPA

Istnieją następujące funkcje JPA:

  • Jest to potężne repozytorium i niestandardowe abstrakcja mapowania obiektów.
  • Obsługuje dla trwałość między sklepami . Oznacza to, że encja może być częściowo przechowywana w MySQL i Neo4j (Graph Database Management System).
  • Dynamicznie generuje zapytania na podstawie nazw metod zapytań.
  • Klasy bazowe domeny zapewniają podstawowe właściwości.
  • Wspiera przejrzysty audyt.
  • Możliwość integracji niestandardowego kodu repozytorium.
  • Łatwo jest zintegrować się z Spring Framework z niestandardową przestrzenią nazw.

Architektura JPA

JPA jest źródłem przechowywania jednostek biznesowych jako jednostek relacyjnych. Pokazuje, jak zdefiniować POJO jako byt i jak zarządzać bytami w relacji.

Poniższy rysunek opisuje architekturę JPA na poziomie klas, która opisuje podstawowe klasy i interfejsy JPA zdefiniowane w trwałość javaxa pakiet. Architektura JPA zawiera następujące jednostki:

    Trwałość:Jest to klasa zawierająca metody statyczne umożliwiające uzyskanie instancji EntityManagerFactory.Fabryka EntityManager:Jest to klasa fabryczna EntityManager. Tworzy i zarządza wieloma instancjami EntityManager.Menedżer encji:To jest interfejs. Kontroluje operacje trwałości na obiektach. Działa dla instancji Query.Podmiot:Jednostki to obiekty trwałości przechowywane jako rekordy w bazie danych.Jednostka trwałości:Definiuje zbiór wszystkich klas jednostek. W aplikacji zarządzają nią instancje EntityManager. Zbiór klas jednostek reprezentuje dane zawarte w pojedynczym magazynie danych.Transakcja jednostki:To ma Jeden na jednego związek z klasą EntityManager. Dla każdego EntityManager operacje są obsługiwane przez klasę EntityTransaction.Zapytanie:Jest to interfejs wdrażany przez każdego dostawcę JPA w celu uzyskania obiektów relacji spełniających kryteria.
Spring Boot w formacie jpa

Relacje klasowe WZP

Klasy i interfejsy, które omówiliśmy powyżej, utrzymują relację. Poniższy rysunek przedstawia relację pomiędzy klasami i interfejsami.

Spring Boot w formacie jpa
  • Relacja pomiędzy EntityManager i EntiyTransaction jest taka Jeden na jednego . Dla każdej operacji EntityManager istnieje instancja EntityTransaction.
  • Relacja pomiędzy EntityManageFactory i EntiyManager jest jeden za dużo . Jest to klasa fabryczna instancji EntityManager.
  • Relacja pomiędzy EntityManager i Query jest następująca jeden za dużo . Korzystając z instancji klasy EntityManager, możemy wykonać dowolną liczbę zapytań.
  • Relacja pomiędzy EntityManager i Entity jest jeden za dużo . Instancja EntityManager może zarządzać wieloma jednostkami.

Wdrożenia JPA

JPA to interfejs API typu open source. Istnieje wielu dostawców dla przedsiębiorstw, takich jak Eclipse, RedHat, Oracle itp., którzy dostarczają nowe produkty poprzez dodanie do nich JPA. Istnieje kilka popularnych frameworków implementacji JPA, takich jak Hibernacja, EclipseLink, DataNucleus, itp. Jest również znany jako Mapowanie relacji obiektowych (ORM).

Mapowanie relacji obiektowych (ORM)

W ORM nazywa się mapowanie obiektów Java na tabele bazy danych i odwrotnie Mapowanie obiektowo-relacyjne. Mapowanie ORM działa jako pomost pomiędzy relacyjna baza danych (tabele i zapisy) oraz Aplikacja Java (klasy i obiekty).

Na poniższym rysunku warstwa ORM jest warstwą adaptera. Dostosowuje język grafów obiektowych do języka SQL i tabel relacji.

Spring Boot w formacie jpa

Warstwa ORM istnieje pomiędzy aplikacją a bazą danych. Konwertuje klasy i obiekty Java, dzięki czemu można je przechowywać i zarządzać w relacyjnej bazie danych. Domyślnie utrzymująca się nazwa staje się nazwą tabeli, a pola stają się kolumnami. Po skonfigurowaniu aplikacji każdy wiersz tabeli odpowiada obiektowi.

Wersje JPA

Wcześniejsze wersje EJB definiowały warstwę trwałości w połączeniu z warstwą logiki biznesowej za pomocą javax.ejb.EntityBean Interfejs. Specyfikacja EJB zawiera definicję JPA.

Wprowadzając EJB 3.0, warstwa trwałości została oddzielona i określona jako JPA 1.0 (Java Persistence API). Specyfikacje tego interfejsu API zostały opublikowane wraz ze specyfikacjami JAVA EE5 11 maja 2006 r. przy użyciu JSR 220.

W 2019 roku nazwa JPA została zmieniona na Trwałość Dżakarty . Najnowsza wersja JPA to 2.2 . Obsługuje następujące funkcje:

  • Java 8, API danych i czasu
  • Wstrzyknięcie CDI w konwersji atrybutów
  • Tworzy adnotacje @Repeatable

Różnica między JPA i Hibernacją

Wspólny Parlament Europejski: JPA to specyfikacja języka Java używana do uzyskiwania dostępu do danych, zarządzania nimi i utrzymywania ich między obiektem Java a relacyjną bazą danych. Jest to standardowe podejście dla ORM.

Hibernować: Jest to lekkie narzędzie ORM typu open source, które służy do przechowywania obiektów Java w systemie relacyjnej bazy danych. Jest dostawcą JPA. Opiera się na wspólnym podejściu dostarczonym przez WZP.

W poniższej tabeli opisano różnice między JPA i Hibernate.

JPA Hibernować
JPA jest Specyfikacja Javy do mapowania danych relacji w aplikacji Java. Hibernacja to Struktura ORM który zajmuje się trwałością danych.
JPA nie zapewnia żadnych klas implementacji. Prowadzi zajęcia wdrożeniowe.
Używa niezależnego od platformy języka zapytań o nazwie JPQL (Język zapytań o trwałość Java). Używa własnego języka zapytań o nazwie HQL (Język zapytań hibernacji).
Jest zdefiniowany w javax.persistence pakiet. Jest zdefiniowany w org.hibernate pakiet.
Jest zaimplementowany w różnych narzędziach ORM, takich jak Hibernacja, EclipseLink, itp. Hibernacja to dostawca PSD.
JPA używa Menedżer jednostek do obsługi trwałości danych. W trybie Hibernate używa Sesja do obsługi trwałości danych.

Dane startowe Spring Boot JPA

Spring Boot zapewnia zależność startera spring-boot-starter-data-jpa aby efektywnie połączyć aplikację Spring Boot z relacyjną bazą danych. Spring-boot-starter-data-jpa wewnętrznie korzysta z zależności spring-boot-jpa.

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

Przykład JPA Spring Boot

Stwórzmy aplikację Spring Boot, która używa JPA do łączenia się z bazą danych. W poniższym przykładzie użyliśmy bazy danych w pamięci Derby Apache'a.

Derby Apache'a: To jest open source, osadzony relacyjna baza danych zaimplementowana w całości w Javie. Jest dostępny na licencji Apache 2.0. Apache Derby ma następujące zalety:

czym jest struktura w strukturze danych
  • Jest łatwy w instalacji, wdrożeniu i obsłudze.
  • Opiera się na standardach Java, JDBC i SQL.
  • Zapewnia wbudowany sterownik JDBC, który pozwala nam osadzić Derby w dowolnym rozwiązaniu opartym na Javie.
  • Obsługuje także tryb klient/serwer ze sterownikiem JDBC Derby Network Client i serwerem sieciowym Derby.

Spring Boot może automatycznie skonfigurować wbudowaną bazę danych, taką jak H2, HSQL, I Bazy danych Derby . Nie musimy podawać żadnych adresów URL połączeń. Musimy jedynie uwzględnić zależność kompilacji od wbudowanej bazy danych, której chcemy użyć.

W Spring Boot możemy łatwo zintegrować bazę danych Apache Derby, po prostu dodając derby zależność w pliku pom.xml.

 org.apache.derby derby runtime 

Krok 1: Otwórz inicjalizację wiosny https://start.spring.io/ .

Krok 2: Wybierz najnowszą wersję Spring Boot 2.3.0(MIGAWKA)

Krok 3: Zapewnić Grupa nazwa. Dostarczyliśmy com.javatpoint.

Krok 4: Zapewnić Artefakt ID. Dostarczyliśmy przykład-apache-derby .

Krok 5: Dodaj zależności: Spring Web, Spring Data JPA, I Baza danych Apache Derby .

Krok 6: Kliknij na Generować przycisk. Kiedy klikniemy przycisk Generuj, zawija projekt w plik Jar i pobiera go do systemu lokalnego.

Spring Boot w formacie jpa

Krok 7: Wyodrębnij plik Jar i wklej go do obszaru roboczego STS.

lis kontra wilk

Krok 8: Importuj folder projektu do STS.

Plik -> Importuj -> Istniejące projekty Maven -> Przeglądaj -> Wybierz folder Apache-derby-example -> Zakończ

Importowanie zajmuje trochę czasu.

Krok 9: Utwórz pakiet o nazwie com.javatpoint.model w folderze src/główny/java.

Krok 10: Utwórz klasę o nazwie Rekord użytkownika w paczce com.javatpoint.model i wykonaj następujące czynności:

  • Zdefiniuj trzy zmienne identyfikator, imię, I e-mail .
  • Generuj gettery i settery.
    Kliknij plik prawym przyciskiem myszy -> Źródło -> Generuj moduły pobierające i ustawiające
  • Zdefiniuj domyślny konstruktor.
  • Oznacz klasę jako Podmiot za pomocą adnotacji @Podmiot.
  • Ocena ID jako klucz podstawowy, korzystając z adnotacji @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: Utwórz pakiet o nazwie com.javatpoint.controller w folderze src/główny/java.

Krok 12: Utwórz klasę kontrolera o nazwie Kontroler użytkownika w paczce com.javatpoint.controller i wykonaj następujące czynności:

  • Oznacz klasę jako kontroler za pomocą adnotacji @RestController.
  • Automatycznie połączono zajęcia Obsługa użytkownika za pomocą adnotacji @Autowired .
  • Zdefiniowaliśmy dwa mapowania, jedno dla zdobycie wszystkich użytkowników i drugi za Dodaj użytkownika.

Kontroler użytkownika.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: Utwórz pakiet o nazwie com.javatpoint.service w folderze src/główny/java.

Krok 14: Utwórz klasę usługi o nazwie Obsługa użytkownika w paczce com.javatpoint.service i wykonaj następujące czynności:

  • Oznacz klasę jako usługę za pomocą adnotacji @Praca.
  • Automatycznie okablowałem Repozytorium użytkowników
  • Zdefiniuj metodę getAllUsers() która zwraca listę
  • Zdefiniuj inną nazwę metody Dodaj użytkownika() który zapisuje rekord użytkownika.

Usługa użytkownika.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: Utwórz pakiet o nazwie com.javatpoint.repository w folderze src/główny/java.

Krok 16: Utwórz interfejs repozytorium o nazwie Repozytorium użytkowników w paczce com.javatpoint.repository i rozciąga się Repozytorium Crud .

Repozytorium użytkownika.java

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

Krok 17: Teraz otwórz ApacheDerbyExampleApplication.java plik. Jest tworzony domyślnie podczas konfigurowania aplikacji.

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 skonfigurowaliśmy wszystkie niezbędne klasy i pakiety zgodnie z wymaganiami. Zauważ, że nie podaliśmy żadnych adres URL połączenia dla bazy danych. Po wykonaniu wszystkich powyższych kroków katalog projektu wygląda następująco:

Spring Boot w formacie jpa

Uruchommy aplikację.

Krok 18: Otworzyć ApacheDerbyExampleApplication.java plik i uruchom go jako aplikację Java.

Krok 19: Otwórz przeglądarkę i wywołaj adres URL http://localhost:8080/. Zwraca pustą listę, ponieważ nie dodaliśmy żadnego użytkownika na liście.

Aby dodać użytkownika do bazy danych, wyślemy plik POST żądanie za pomocą Listonosz .

Krok 20: Otworzyć Listonosz i wykonaj następujące czynności:

  • Wybierz POST
  • Wywołaj adres URL http://localhost:8080/add-user.
  • Kliknij na Ciało
  • Wybierz typ zawartości jako JSON (aplikacja/json).
  • Wstaw dane, które chcesz wstawić do bazy danych. Wprowadziliśmy następujące dane:
 { 'id': '001', 'name': 'Tom', 'email': '[email protected]' } 
  • Kliknij na Wysłać przycisk.
Spring Boot w formacie jpa

Kiedy klikniemy przycisk Wyślij, pojawi się Stan:200 OK . Oznacza to, że żądanie zostało pomyślnie wykonane.

Krok 21: Otwórz przeglądarkę i wywołaj adres URL http://localhost:8080. Zwraca użytkownika, którego umieściliśmy w bazie danych.

Spring Boot w formacie jpa
Pobierz przykładowy projekt Apache Derby