Co je JPA?
Jarní boty JPA je specifikace Java pro správu vztahový data v aplikacích Java. Umožňuje nám přistupovat a uchovávat data mezi objektem/třídou Java a relační databází. Následuje JPA Objektově-relační mapování (ORM). Jedná se o sadu rozhraní. Poskytuje také běhové prostředí EntityManager API pro zpracování dotazů a transakcí na objekty proti databázi. Používá na platformě nezávislý objektově orientovaný dotazovací jazyk JPQL (Java Persistent Query Language).
V kontextu vytrvalosti pokrývá tři oblasti:
- Java Persistence API
- Samotné API, definované v vytrvalost balík
JPA není rámec. Definuje koncept, který může být implementován jakýmkoliv rámcem.
náhodný žádný generátor v javě
Proč bychom měli používat JPA?
JPA je jednodušší, čistší a méně pracný než JDBC, SQL a ručně psané mapování. JPA je vhodný pro komplexní aplikace neorientované na výkon. Hlavní výhodou JPA oproti JDBC je to, že v JPA jsou data reprezentována objekty a třídami, zatímco v JDBC jsou data reprezentována tabulkami a záznamy. Používá POJO k reprezentaci trvalých dat, což zjednodušuje programování databáze. Existuje několik dalších výhod JPA:
- JPA se vyhýbá psaní DDL v dialektu SQL specifickém pro databázi. Místo toho umožňuje mapování v XML nebo pomocí Java anotací.
- JPA nám umožňuje vyhnout se psaní DML v dialektu SQL specifickém pro databázi.
- JPA nám umožňuje ukládat a načítat Java objekty a grafy bez jakéhokoli jazyka DML.
- Když potřebujeme provádět dotazy JPQL, umožňuje nám to vyjádřit dotazy z hlediska entit Java spíše než (nativní) tabulky a sloupce SQL.
Vlastnosti JPA
JPA má následující vlastnosti:
- Je to výkonné úložiště a vlastní abstrakce mapování objektů.
- Podporuje pro vytrvalost mezi obchody . To znamená, že entita může být částečně uložena v MySQL a Neo4j (Graph Database Management System).
- Dynamicky generuje dotazy z názvu metody dotazů.
- Základní třídy domény poskytují základní vlastnosti.
- Podporuje transparentní audit.
- Možnost integrace vlastního kódu úložiště.
- Je snadné integrovat se s Spring Framework s vlastním jmenným prostorem.
Architektura JPA
JPA je zdrojem pro ukládání podnikatelských subjektů jako relačních subjektů. Ukazuje, jak definovat POJO jako entitu a jak spravovat entity se vztahem.
Následující obrázek popisuje architekturu JPA na úrovni třídy, která popisuje základní třídy a rozhraní JPA, která je definována v perzistence javaxu balík. Architektura JPA obsahuje následující jednotky:
Třídní vztahy JPA
Třídy a rozhraní, o kterých jsme hovořili výše, udržují vztah. Následující obrázek ukazuje vztah mezi třídami a rozhraními.
- Vztah mezi EntityManager a EntiyTransaction je jedna ku jedné . Pro každou operaci EntityManager existuje instance EntityTransaction.
- Vztah mezi EntityManageFactory a EntiyManager je jeden k mnoha . Je to tovární třída instance EntityManager.
- Vztah mezi EntityManager a Query je jeden k mnoha . Můžeme provést libovolný počet dotazů pomocí instance třídy EntityManager.
- Vztah mezi EntityManager a Entity je jeden k mnoha . Instance EntityManager může spravovat více entit.
Implementace JPA
JPA je open-source API. Existují různí dodavatelé podniků, jako je Eclipse, RedHat, Oracle atd., kteří poskytují nové produkty přidáním JPA do nich. Existuje několik populárních implementačních rámců JPA, jako je např Hibernate, EclipseLink, DataNucleus, atd. Je také známý jako Objektově-relační mapování (ORM) nástroj.
Object-Relation Mapping (ORM)
V ORM se nazývá mapování objektů Java na databázové tabulky a naopak Objektově-relační mapování. Mapování ORM funguje jako most mezi a relační databáze (tabulky a záznamy) a Java aplikace (třídy a objekty).
Na následujícím obrázku je vrstva ORM vrstvou adaptéru. Přizpůsobuje jazyk objektových grafů jazyku SQL a relačních tabulek.
Vrstva ORM existuje mezi aplikací a databází. Převádí třídy a objekty Java tak, aby mohly být uloženy a spravovány v relační databázi. Ve výchozím nastavení se název, který přetrvává, stane názvem tabulky a pole se stanou sloupci. Jakmile je aplikace nastavena, každý řádek tabulky odpovídá objektu.
Verze JPA
Dřívější verze EJB definují vrstvu persistence kombinovanou s použitím vrstvy obchodní logiky javax.ejb.EntityBean Rozhraní. Specifikace EJB zahrnuje definici JPA.
Při zavádění EJB 3.0 byla vrstva persistence oddělena a specifikována jako JPA 1.0 (Java Persistence API). Specifikace tohoto API byly vydány spolu se specifikacemi JAVA EE5 11. května 2006 s použitím JSR 220.
V roce 2019 se JPA přejmenovala na Jakarta Persistence . Nejnovější verze JPA je 2.2 . Podporuje následující funkce:
- Java 8, datové a časové API
- CDI Injection v AttributeConvertes
- To dělá anotace @Repeatable
Rozdíl mezi JPA a Hibernate
JPA: JPA je specifikace Java, která se používá pro přístup, správu a zachování dat mezi objektem Java a relační databází. Je to standardní přístup pro ORM.
Přezimovat: Jedná se o lehký nástroj ORM s otevřeným zdrojovým kódem, který se používá k ukládání objektů Java v relačním databázovém systému. Je poskytovatelem JPA. Řídí se společným přístupem, který poskytuje JPA.
Následující tabulka popisuje rozdíly mezi JPA a Hibernate.
JPA | Přezimovat |
---|---|
JPA je a Specifikace Java pro mapování relačních dat v aplikaci Java. | Hibernace je ORM rámec který se zabývá perzistencí dat. |
JPA neposkytuje žádné implementační třídy. | Poskytuje implementační třídy. |
Používá platformově nezávislý dotazovací jazyk tzv JPQL (Java Persistence Query Language). | Používá svůj vlastní dotazovací jazyk tzv HQL (Hibernate Query Language). |
Je definován v javax.perzistence balík. | Je definován v org.hibernovat balík. |
Je implementován v různých nástrojích ORM, jako je Hibernace, EclipseLink, atd. | Hibernace je poskytovatel PSD. |
používá JPA EntityManager pro zpracování perzistence dat. | V režimu Hibernate používá Zasedání pro zpracování perzistence dat. |
Spring Boot Starter Data JPA
Spring Boot poskytuje závislost na startéru spring-boot-starter-data-jpa pro efektivní propojení aplikace Spring Boot s relační databází. Spring-boot-starter-data-jpa interně používá závislost spring-boot-jpa.
abeceda s čísly
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE
Příklad Spring Boot JPA
Vytvořme aplikaci Spring Boot, která používá JPA pro připojení k databázi. V následujícím příkladu jsme použili databázi v paměti Apache Derby.
Apache Derby: Je to an open-source, vestavěný relační databáze plně implementovaná v Javě. Je k dispozici pod licencí Apache 2.0. Apache Derby má následující výhody:
- Snadno se instaluje, nasazuje a používá.
- Je založen na standardech Java, JDBC a SQL.
- Poskytuje vestavěný ovladač JDBC, který nám umožňuje vložit Derby do jakéhokoli řešení založeného na Javě.
- Podporuje také režim klient/server s ovladačem Derby Network Client JDBC a Derby Network Server.
Spring Boot umí automaticky nakonfigurovat vestavěnou databázi, jako je např H2, HSQL, a Databáze Derby . Nemusíme poskytovat žádné adresy URL připojení. Potřebujeme pouze zahrnout závislost sestavení na vestavěné databázi, kterou chceme použít.
Ve Spring Bootu můžeme snadno integrovat databázi Apache Derby pouhým přidáním Derby závislost v souboru pom.xml.
org.apache.derby derby runtime
Krok 1: Otevřete Spring Initializr https://start.spring.io/ .
Krok 2: Vyberte nejnovější verzi Spring Boot 2.3.0 (SNÍMEK)
Krok 3: Poskytněte Skupina název. Poskytli jsme com.javatpoint.
Krok 4: Poskytněte Artefakt Id. Poskytli jsme apache-derby-příklad .
Krok 5: Přidejte závislosti: Spring Web, Spring Data JPA, a Databáze Apache Derby .
arraylist v jazyce Java
Krok 6: Klikněte na generovat knoflík. Když klikneme na tlačítko Generate, zabalí projekt do souboru Jar a stáhne jej do místního systému.
Krok 7: Extrahujte soubor Jar a vložte jej do pracovního prostoru STS.
Krok 8: Import složku projektu do STS.
Soubor -> Import -> Stávající projekty Maven -> Procházet -> Vyberte složku apache-derby-example -> Dokončit
Import nějakou dobu trvá.
Krok 9: Vytvořte balíček s názvem com.javatpoint.model ve složce src/main/java.
Krok 10: Vytvořte třídu s názvem UserRecord v balíčku com.javatpoint.model a proveďte následující:
- Definujte tři proměnné id, jméno, a e-mailem .
- Generovat getry a setry.
Klikněte pravým tlačítkem na soubor -> Zdroj -> Generovat gettry a setry - Definujte výchozí konstruktor.
- Označte třídu jako an Entita pomocí anotace @Entity.
- Označit Id jako primární klíč pomocí anotace @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: Vytvořte balíček s názvem com.javatpoint.controller ve složce src/main/java.
Krok 12: Vytvořte třídu Controller s názvem UserController v balíčku com.javatpoint.controller a proveďte následující:
jak vrátit pole v Javě
- Označte třídu jako kontrolor pomocí anotace @RestController.
- Automaticky zapojené do třídy UserService pomocí anotace @Autowired .
- Definovali jsme dvě zobrazení, jedno pro získání všech uživatelů a druhý pro přidat uživatele.
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: Vytvořte balíček s názvem com.javatpoint.service ve složce src/main/java.
Krok 14: Vytvořte třídu Service s názvem UserService v balíčku com.javatpoint.service a proveďte následující:
- Označte třídu jako službu pomocí anotace @Servis.
- Automaticky zapojeno UserRepository
- Definujte metodu getAllUsers() která vrátí seznam
- Definujte jiný název metody přidat uživatele() který uloží uživatelský 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: Vytvořte balíček s názvem com.javatpoint.repository ve složce src/main/java.
Krok 16: Vytvořte rozhraní úložiště s názvem UserRepository v balíčku com.javatpoint.repository a prodlužuje se CrudRepository .
UserRepository.java
package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { }
Krok 17: Nyní otevřete ApacheDerbyExampleApplication.java soubor. Ve výchozím nastavení se vytvoří při nastavování aplikace.
.rovná se java
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); } }
Nyní jsme nastavili všechny potřebné třídy a balíčky podle požadavků. Všimněte si, že jsme žádné neposkytli URL připojení pro databázi. Po dokončení všech výše uvedených kroků vypadá adresář projektu takto:
Spusťte aplikaci.
Krok 18: Otevři ApacheDerbyExampleApplication.java soubor a spusťte jej jako aplikaci Java.
Krok 19: Otevřete prohlížeč a vyvolejte URL http://localhost:8080/. Vrací prázdný seznam, protože jsme do seznamu nepřidali žádného uživatele.
Pro přidání uživatele do databáze zašleme a POŠTA požádat pomocí Listonoš .
Krok 20: Otevři Listonoš a proveďte následující:
- Vybrat POŠTA
- Vyvolejte adresu URL http://localhost:8080/add-user.
- Klikněte na Tělo
- Vyberte Content-Type as JSON (aplikace/json).
- Vložte data, která chcete vložit do databáze. Vložili jsme následující údaje:
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- Klikněte na Poslat knoflík.
Když klikneme na tlačítko Odeslat, zobrazí se Stav: 200 OK . Znamená to, že požadavek byl úspěšně proveden.
Krok 21: Otevřete prohlížeč a vyvolejte URL http://localhost:8080. Vrátí uživatele, kterého jsme vložili do databáze.
Stáhněte si příklad projektu Apache derby