logo

Spring Boot JPA

Що таке JPA?

Spring Boot JPA це специфікація Java для керування реляційний даних у програмах Java. Це дозволяє нам отримувати доступ і зберігати дані між об’єктом/класом Java і реляційною базою даних. Далі JPA Об'єктно-відносне відображення (ORM). Це набір інтерфейсів. Він також забезпечує час виконання EntityManager API для обробки запитів і транзакцій щодо об’єктів у базі даних. Він використовує незалежну від платформи об’єктно-орієнтовану мову запитів JPQL (Java Persistent Query Language).

У контексті наполегливості він охоплює три сфери:

  • Java Persistence API
  • Об'єктно-реляційнийметадані
  • Сам API, визначений у наполегливість пакет

JPA не є рамкою. Він визначає концепцію, яка може бути реалізована будь-якою структурою.

Чому ми повинні використовувати 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 містить такі блоки:

    Стійкість:Це клас, який містить статичні методи для отримання екземпляра EntityManagerFactory.EntityManagerFactory:Це фабричний клас EntityManager. Він створює та керує кількома екземплярами EntityManager.EntityManager:Це інтерфейс. Він контролює операції збереження об’єктів. Це працює для екземпляра Query.Суб'єкт:Сутності — це об’єкти збереження, які зберігаються як запис у базі даних.Одиниця стійкості:Він визначає набір усіх класів сутностей. У додатку ним керують екземпляри EntityManager. Набір класів сутностей представляє дані, що містяться в одному сховищі даних.EntityTransaction:Він має a один до одного зв’язок із класом EntityManager. Для кожного EntityManager операції обслуговуються класом EntityTransaction.Запит:Це інтерфейс, який реалізує кожен постачальник JPA для отримання об’єктів відношення, які відповідають критеріям.
Spring Boot jpa

Відносини класів JPA

Класи та інтерфейси, які ми обговорили вище, підтримують зв'язок. На наступному малюнку показано зв'язок між класами та інтерфейсами.

Spring Boot jpa
  • Відносини між EntityManager і EntiyTransaction є один до одного . Для кожної операції EntityManager існує екземпляр EntityTransaction.
  • Відносини між EntityManageFactory та EntiyManager є один до багатьох . Це заводський клас для екземпляра EntityManager.
  • Відношення між EntityManager і Query є один до багатьох . Ми можемо виконувати будь-яку кількість запитів, використовуючи екземпляр класу EntityManager.
  • Відношення між EntityManager і Entity є один до багатьох . Примірник EntityManager може керувати кількома сутностями.

Впровадження JPA

JPA — це API з відкритим кодом. Існують різні корпоративні постачальники, такі як Eclipse, RedHat, Oracle тощо, які надають нові продукти, додаючи в них JPA. Є деякі популярні фреймворки реалізації JPA, такі як Hibernate, EclipseLink, DataNucleus, тощо Він також відомий як Об'єктно-відносне відображення (ORM) інструмент.

рядок як масив

Відображення об'єктних зв'язків (ORM)

В ORM викликається відображення об’єктів Java у таблиці бази даних і навпаки Об'єктно-реляційне відображення. Відображення ORM працює як міст між a реляційна база даних (таблиці і записи) і Додаток Java (класи та об'єкти).

На наступному малюнку рівень ORM є рівнем адаптера. Він адаптує мову об’єктних графів до мови SQL і таблиць зв’язків.

Spring Boot jpa

Рівень ORM існує між додатком і базою даних. Він перетворює класи та об’єкти Java, щоб їх можна було зберігати та керувати ними в реляційній базі даних. За замовчуванням ім’я, яке залишається, стає ім’ям таблиці, а поля – стовпцями. Після налаштування програми кожен рядок таблиці відповідає об’єкту.

Версії JPA

Попередні версії EJB визначають рівень стійкості в поєднанні з використанням рівня бізнес-логіки javax.ejb.EntityBean Інтерфейс. Специфікація EJB містить визначення JPA.

Під час представлення EJB 3.0 рівень стійкості було відокремлено та визначено як JPA 1.0 (Java Persistence API). Специфікації цього 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 Persistence Query Language). Він використовує власну мову запитів під назвою HQL (Мова запитів Hibernate).
Це визначено в 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 

Приклад Spring Boot JPA

Давайте створимо програму Spring Boot, яка використовує JPA для підключення до бази даних. У наступному прикладі ми використали базу даних у пам’яті Apache Derby.

Apache Derby: Це ан з відкритим кодом, вбудований реляційна база даних, повністю реалізована на Java. Він доступний за ліцензією Apache 2.0. Є наступні переваги Apache Derby:

  • Його легко встановити, розгорнути та використовувати.
  • Він заснований на стандартах Java, JDBC і SQL.
  • Він надає вбудований драйвер JDBC, який дозволяє нам вбудовувати Derby у будь-яке рішення на основі Java.
  • Він також підтримує режим клієнт/сервер із драйвером Derby Network Client JDBC і Derby Network Server.

Spring Boot може автоматично налаштувати вбудовану базу даних, наприклад H2, HSQL, і Бази даних Derby . Нам не потрібно надавати будь-які URL-адреси підключення. Нам потрібно лише включити залежність збірки від вбудованої бази даних, яку ми хочемо використовувати.

У Spring Boot ми можемо легко інтегрувати базу даних Apache Derby, просто додавши Дербі залежність у файлі pom.xml.

 org.apache.derby derby runtime 

Крок 1: Open Spring Initializr https://start.spring.io/ .

Крок 2: Виберіть останню версію Spring Boot 2.3.0 (ЗНІМОК)

крок 3: Надайте Група назва. Ми забезпечили com.javatpoint.

крок 4: Надайте Артефакт ID. Ми забезпечили apache-derby-приклад .

лисиця проти вовка

крок 5: Додайте залежності: Spring Web, Spring Data JPA, і База даних Apache Derby .

Крок 6: Натисніть на Генерувати кнопку. Коли ми натискаємо кнопку «Створити», він загортає проект у файл Jar і завантажує його в локальну систему.

Spring Boot jpa

Крок 7: Витягніть файл Jar і вставте його в робочу область STS.

Крок 8: Імпорт папку проекту в STS.

Файл -> Імпорт -> Існуючі проекти Maven -> Огляд -> Виберіть папку apache-derby-example -> Готово

Імпорт займає деякий час.

Крок 9: Створіть пакет із назвою com.javatpoint.model в папці src/main/java.

Крок 10: Створіть клас із назвою UserRecord в упаковці com.javatpoint.model і виконайте наступне:

  • Визначте три змінні id, ім'я, і електронною поштою .
  • Створіть Getters і Setter.
    Клацніть правою кнопкою миші на файлі -> Джерело -> Створити Getters і Setters
  • Визначте конструктор за замовчуванням.
  • Позначте клас як an Сутність за допомогою анотації @Entity.
  • Марк ID як первинний ключ за допомогою анотації @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; } } 

Крок 11: Створіть пакет із назвою com.javatpoint.controller в папці src/main/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/main/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/main/java.

Крок 16: Створіть інтерфейс сховища з назвою UserRepository в упаковці com.javatpoint.repository і розширюється CrudRepository .

str до внутр

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-адреса підключення для бази даних. Після виконання всіх вищезазначених кроків каталог проекту виглядає так:

Spring Boot jpa

Давайте запустимо додаток.

Крок 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]' } 
  • Натисніть на Надіслати кнопку.
Spring Boot jpa

Коли ми натискаємо кнопку «Надіслати», вона відображається Статус: 200 OK . Це означає, що запит успішно виконано.

Крок 21: Відкрийте браузер і викличте URL-адресу http://localhost:8080. Він повертає користувача, якого ми вставили в базу даних.

Spring Boot jpa
Завантажте приклад проекту Apache derby