Какво е JPA?
Пролетно зареждане JPA е Java спецификация за управление релационни данни в Java приложения. Позволява ни достъп и запазване на данни между Java обект/клас и релационна база данни. Следва JPA Картографиране на обектно отношение (ORM). Това е набор от интерфейси. Той също така осигурява време за изпълнение EntityManager API за обработка на заявки и транзакции на обектите спрямо базата данни. Той използва независим от платформата обектно-ориентиран език за заявки JPQL (Java Persistent Query Language).
В контекста на постоянството, той обхваща три области:
- Java Persistence API
- Самият API, дефиниран в постоянство пакет
JPA не е рамка. Той дефинира концепция, която може да бъде реализирана от всяка рамка.
java иначе ако
Защо трябва да използваме JPA?
JPA е по-опростен, по-чист и по-малко трудоемък от JDBC, SQL и ръкописното картографиране. JPA е подходящ за сложни приложения, ориентирани към непроизводителност. Основното предимство на JPA пред JDBC е, че в JPA данните са представени от обекти и класове, докато в JDBC данните са представени от таблици и записи. Той използва POJO за представяне на постоянни данни, които опростяват програмирането на бази данни. Има някои други предимства на JPA:
- JPA избягва писането на DDL в специфичен за базата данни диалект на SQL. Вместо това, той позволява картографиране в XML или използване на анотации на Java.
- JPA ни позволява да избягваме писането на DML на специфичния за базата данни диалект на SQL.
- JPA ни позволява да запазваме и зареждаме Java обекти и графики без DML език изобщо.
- Когато трябва да изпълним заявки JPQL, това ни позволява да изразим заявките по отношение на Java обекти, а не на (родната) SQL таблица и колони.
Характеристики на JPA
Има следните характеристики на JPA:
- Това е мощно хранилище и обичай абстракция за картографиране на обекти.
- Поддържа за постоянство между магазините . Това означава, че даден обект може да бъде частично съхранен в MySQL и Neo4j (Graph Database Management System).
- Той динамично генерира заявки от името на методите на заявките.
- Базовите класове на домейна предоставят основни свойства.
- Поддържа прозрачен одит.
- Възможност за интегриране на потребителски код на хранилище.
- Лесно е да се интегрира с Spring Framework с персонализираното пространство от имена.
JPA архитектура
JPA е източник за съхраняване на бизнес обекти като релационни обекти. Той показва как да дефинирате POJO като обект и как да управлявате обекти с релация.
Следващата фигура описва архитектурата на ниво клас на JPA, която описва основните класове и интерфейси на JPA, дефинирани в javax постоянство пакет. Архитектурата на JPA съдържа следните единици:
Класови връзки на JPA
Класовете и интерфейсите, които обсъдихме по-горе, поддържат връзка. Следващата фигура показва връзката между класове и интерфейси.
- Връзката между EntityManager и EntiyTransaction е едно към едно . Има екземпляр на EntityTransaction за всяка операция на EntityManager.
- Връзката между EntityManageFactory и EntiyManager е едно към много . Това е фабричен клас за екземпляр на EntityManager.
- Връзката между EntityManager и Query е едно към много . Можем да изпълним произволен брой заявки, като използваме екземпляр на клас EntityManager.
- Връзката между EntityManager и Entity е едно към много . Един екземпляр на EntityManager може да управлява множество обекти.
Изпълнения на JPA
JPA е API с отворен код. Има различни корпоративни доставчици като Eclipse, RedHat, Oracle и др., които предоставят нови продукти, като добавят JPA в тях. Има някои популярни рамки за внедряване на JPA, като напр Хибернация, EclipseLink, DataNucleus, и др. Известен е още като Картографиране на обектно отношение (ORM) инструмент.
Съпоставяне на обектно отношение (ORM)
В ORM се извиква картографирането на Java обекти към таблици на базата данни и обратно Обектно-релационно картографиране. ORM картографирането работи като мост между a релационна база данни (таблици и записи) и Java приложение (класове и обекти).
На следващата фигура ORM слоят е адаптерен слой. Той адаптира езика на обектните графики към езика на SQL и релационните таблици.
Слоят ORM съществува между приложението и базата данни. Той преобразува Java класовете и обектите, така че да могат да се съхраняват и управляват в релационна база данни. По подразбиране името, което остава, става име на таблицата, а полетата стават колони. След като дадено приложение бъде настроено, всеки ред на таблицата съответства на обект.
JPA версии
По-ранните версии на EJB дефинират слоя за устойчивост, комбиниран със слоя на бизнес логиката javax.ejb.EntityBean Интерфейс. EJB спецификацията включва дефиницията на JPA.
При въвеждането на EJB 3.0, слоят за устойчивост беше отделен и определен като JPA 1.0 (API за устойчивост на Java). Спецификациите на този API бяха пуснати заедно със спецификациите на JAVA EE5 на 11 май 2006 г., използвайки JSR 220.
През 2019 г. JPA се преименува на Джакарта Постоянство . Най-новата версия на JPA е 2.2 . Той поддържа следните функции:
- Java 8, API за данни и време
- CDI инжектиране в AttributeConvertes
- Той прави анотации @Repeatable
Разлика между JPA и Hibernate
JPA: JPA е спецификация на Java, която се използва за достъп, управление и запазване на данни между Java обект и релационна база данни. Това е стандартен подход за ORM.
Хибернация: Това е лек ORM инструмент с отворен код, който се използва за съхраняване на Java обекти в системата за релационни бази данни. Той е доставчик на JPA. Той следва общ подход, предоставен от JPA.
Следната таблица описва разликите между JPA и Hibernate.
JPA | Хибернация |
---|---|
JPA е a Java спецификация за картографиране на релационни данни в Java приложение. | Хибернацията е ORM рамка който се занимава с постоянството на данните. |
JPA не предоставя никакви класове за изпълнение. | Той предоставя класове за изпълнение. |
Той използва независим от платформата език за заявки, наречен JPQL (Език за заявки за устойчивост на Java). | Той използва свой собствен език за заявки, наречен HQL (Език за заявки за хибернация). |
Определено е в javax.persistence пакет. | Определено е в org.hibernate пакет. |
Внедрява се в различни ORM инструменти като Хибернация, EclipseLink, и т.н. | Хибернацията е доставчик на PSD. |
JPA използва EntityManager за обработка на постоянството на данни. | В Hibernate използва Сесия за обработка на постоянството на данни. |
Spring Boot Starter Data JPA
Spring Boot осигурява начална зависимост spring-boot-starter-data-jpa за ефективно свързване на приложението Spring Boot с релационна база данни. Spring-boot-starter-data-jpa вътрешно използва зависимостта spring-boot-jpa.
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE
Пример за JPA за пролетно зареждане
Нека създадем Spring Boot приложение, което използва JPA за свързване с базата данни. В следващия пример сме използвали база данни в паметта Apache Derby.
Apache Derby: Това е с отворен код, вграден релационна база данни, реализирана изцяло в Java. Предлага се под лиценз Apache 2.0. Има следните предимства на Apache Derby:
въпроси за java интервю
- Той е лесен за инсталиране, внедряване и използване.
- Базиран е на стандартите Java, JDBC и SQL.
- Той предоставя вграден JDBC драйвер, който ни позволява да вградим Derby във всяко решение, базирано на Java.
- Той също така поддържа режим клиент/сървър с драйвера Derby Network Client JDBC и Derby Network Server.
Spring Boot може автоматично да конфигурира вградена база данни, като напр H2, HSQL, и Дерби бази данни . Не е необходимо да предоставяме никакви URL адреси за връзка. Трябва само да включим зависимост за компилация от вградената база данни, която искаме да използваме.
В Spring Boot можем лесно да интегрираме база данни Apache Derby само чрез добавяне Дерби зависимост във файла pom.xml.
org.apache.derby derby runtime
Етап 1: Отворете Spring Initializr https://start.spring.io/ .
Стъпка 2: Изберете най-новата версия на Spring Boot 2.3.0 (МОМЕНТНА СНИМКА)
Стъпка 3: Осигурете на Група име. Осигурили сме com.javatpoint.
Стъпка 4: Осигурете на Артефакт Документ за самоличност. Осигурили сме apache-дерби-пример .
Стъпка 5: Добавете зависимостите: Spring Web, Spring Data JPA, и База данни Apache Derby .
Стъпка 6: Кликнете върху Генерирай бутон. Когато щракнем върху бутона Генериране, той обвива проекта в Jar файл и го изтегля в локалната система.
Стъпка 7: Извличане файла Jar и го поставете в STS работното пространство.
Стъпка 8: Импортиране папката на проекта в STS.
Файл -> Импортиране -> Съществуващи проекти на Maven -> Преглед -> Изберете папката apache-derby-example -> Край
Импортирането отнема известно време.
Стъпка 9: Създайте пакет с името com.javatpoint.model в папката src/основен/java.
Стъпка 10: Създайте клас с името UserRecord в опаковката com.javatpoint.model и направете следното:
- Дефинирайте три променливи id, име, и електронна поща .
- Генериране на Getters и Setter.
Щракнете с десния бутон върху файла -> Източник -> Генериране на Getters и Setters - Дефинирайте конструктор по подразбиране.
- Маркирайте класа като Обект с помощта на анотацията @Entity.
- Марк Документ за самоличност като първичен ключ чрез използване на анотацията @Документ за самоличност.
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; } }
Стъпка 11: Създайте пакет с името com.javatpoint.controller в папката src/основен/java.
Стъпка 12: Създайте клас контролер с името Потребителски контролер в опаковката com.javatpoint.controller и направете следното:
- Маркирайте класа като контролер, като използвате анотацията @RestController.
- Автоматично окабеляване на класа UserService с помощта на анотацията @Autowired .
- Дефинирахме две съпоставяния, едно за получаване на всички потребители а другият за добавяне на потребител.
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: Създайте пакет с името com.javatpoint.service в папката src/основен/java.
Стъпка 14: Създайте сервизен клас с името UserService в опаковката com.javatpoint.service и направете следното:
- Маркирайте класа като услуга, като използвате анотацията @Обслужване.
- Автоматично окабеляване на UserRepository
- Определете метод getAllUsers() който връща списък на
- Определете друго име на метод addUser() което запазва потребителския запис.
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: Създайте пакет с името com.javatpoint.repository в папката src/основен/java.
Стъпка 16: Създайте интерфейс на хранилище с името UserRepository в опаковката com.javatpoint.repository и се простира CrudRepository .
публична срещу частна java
UserRepository.java
package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { }
Стъпка 17: Сега отворете ApacheDerbyExampleApplication.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); } }
Сега сме настроили всички необходими класове и пакети според изискванията. Забележете, че не сме предоставили такива URL адрес за връзка за базата данни. След като изпълните всички горни стъпки, директорията на проекта изглежда по следния начин:
Нека стартираме приложението.
Стъпка 18: Отвори ApacheDerbyExampleApplication.java файл и го стартирайте като Java приложение.
Стъпка 19: Отворете браузъра и извикайте URL адреса http://localhost:8080/. Връща празен списък, защото не сме добавили нито един потребител в списъка.
За да добавим потребител към базата данни, ще изпратим a ПУБЛИКУВАНЕ заявка чрез използване на Пощальон .
Стъпка 20: Отвори Пощальон и направете следното:
- Изберете ПУБЛИКУВАНЕ
- Извикайте URL адреса http://localhost:8080/add-user.
- Кликнете върху Тяло
- Изберете Content-Type като JSON (приложение/json).
- Вмъкнете данните, които искате да вмъкнете в базата данни. Вмъкнахме следните данни:
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- Кликнете върху Изпратете бутон.
Когато щракнем върху бутона Изпрати, той се показва Статус: 200 ОК . Това означава, че заявката е изпълнена успешно.
Стъпка 21: Отворете браузъра и извикайте URL адреса http://localhost:8080. Връща потребителя, който сме въвели в базата данни.
Изтеглете примерен проект на Apache derby