English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JPA в Spring Boot является спецификацией Java для управления Java приложениямиотношенияданные. Он позволяет нам доступа и персистирования Java объектов/классов с реляционной базой данных.Объектно-реляционный маппинг(ORM). Это набор интерфейсов. Он также предоставляет EntityManager API для обработки запросов и транзакций к базовым объектам базы данных. Он использует независимое от платформы面向 объектный языковой запрос JPQL (Java Persistence Query Language).
В области持久ности он охватывает три области:
Java Persistence API Object-RelationalmetadataВ пersistence API, определенное в пакете
JPA не является фреймворком. Он определяет концепции, которые можно реализовать в любом фреймворке.
По сравнению с JDBC, JPA проще, чище и требует меньше усилий, чем SQL и ручное маппинг. JPA подходит для сложных приложений, не направленных на производительность. Основным преимуществом JPA по сравнению с JDBC является то, что в JPA данные представлены объектами и классами, а в JDBC - таблицами и записями. Он использует POJO для представления персистентных данных, что упрощает программирование базы данных. У JPA также есть другие преимущества:
JPA избегает использования специфических для базы данных диалектов SQL для написания DDL. Вместо этого он позволяет использовать XML или Java аннотации для маппинга. JPA позволяет нам избегать написания DML на специальных диалектах SQL для конкретных баз данных. JPA позволяет нам сохранять и загружать Java-объекты и графики, не используя никакого DML.Когда мы нуждаемся в выполнении запроса JPQL, он позволяет нам выражать запросы с помощью Java-сущностей, а не (национальных) таблиц и столбцов SQL.
JPA имеет следующие функции:
Это мощное хранилище и пользовательскиеабстракцию объектной карты. Он поддерживаетПереносимость между магазинами. Это означает, что сущность может частично храниться в MySQL и Neo4j (графическая СУБД).Он динамически генерирует запросы из названий методов запросов.Классы базового домена предоставляют основные атрибуты.Он поддерживает прозрачный аудит.Возможность интеграции пользовательского кода хранилища.Легко интегрируется с Spring Framework через пользовательские пространства имен.
JPA является источником для хранения бизнес-сущностей в виде реляционных сущностей. Он показывает, как определить POJO в качестве сущности и как управлять сущностями через реляционное управление.
На следующем рисунке описывается иерархия классов JPA, которая описывает основные классы и интерфейсы JPA. javax переносимостьпакет. Архитектура JPA включает следующие единицы:
Переносимость: Это класс, содержащий статические методы для получения экземпляра EntityManagerFactory. EntityManagerFactory: является фабричным классом EntityManager. Он создает и управляет несколькими экземплярами EntityManager. EntityManager: . Это интерфейс. Он контролирует операции сохранения объектов. Он подходит для экземпляров Query. Entity: Сущность является объектом持久ности, хранящимся в базе данных в виде записи. Единица хранения: Он определяет группу всех классов сущностей. В приложении экземпляр EntityManager управляет ими. Группа классов сущностей представляет данные, содержащиеся в одном хранилище данных. EntityTransaction: Он имеетодин к одномуОтношения. Для каждого EntityManager операции поддерживаются классом EntityTransaction. Запрос: Этот интерфейс реализуется каждым поставщиком JPA для получения объектов отношений, соответствующих условиям.
Классы и интерфейсы, которые обсуждались выше, поддерживают определенное отношение. На следующем рисунке показано отношение между классами и интерфейсами.
Отношение EntityManager и EntityTransaction такое:один к одномуУ каждой операции EntityManager есть экземпляр EntityTransaction. Отношение EntityManageFactory и EntityManager —Одно-ко-много. Это фабричный класс экземпляра EntityManager. Отношение EntityManager и Query —Одно-ко-много. Мы можем использовать экземпляр класса EntityManager для выполнения любого количества запросов. Отношение EntityManager и Entity —Одно-ко-много. Пример EntityManager может управлять несколькими сущностями.
JPA — это открытое API. Есть различные корпоративные поставщики, такие как Eclipse, RedHat, Oracle и другие, которые предоставляют новые продукты, добавляя JPA. Есть популярные реализации JPA, такие как Hibernate, EclipseLink, DataNucleus и т.д. Он также известен какОбъектно-реляционный маппинг(ORM) инструментами.
В ORM, маппинг Java-объектов к таблицам базы данных (и наоборот) называетсяобъектно-реляционного маппинга. ORM-маппинг играет рольреляционная база данныхи (таблицами и записями), и Java-приложениеМост между (классами и объектами)
На рисунке ниже показано, что слой ORM является адаптерным слоем. Он адаптирует язык объектной модели к языку SQL и языку реляционных таблиц.
Слой ORM существует между приложением и базой данных. Он преобразует Java-классы и объекты, чтобы их можно было хранить и управлять ими в реляционной базе данных. По умолчанию, имя persistence становится именем таблицы, а поля — именами столбцов. После того как приложение установлено, каждая строка таблицы соответствует одному объекту.
Ранние версии EJB определяли слой persistence, интегрированный с бизнес-логическим слоем. Используя javax.ejb.EntityBean Интерфейс. Спецификация EJB включает определение JPA.
При введении EJB 3.0 слой persistence был отделен и определен как JPA 1.0 (Java Persistence API). Спецификация API была опубликована вместе с спецификацией JAVA EE5 11 мая 2006 года по JSR 220.
В 2019 году JPA была переименована в Jakarta Persistence . Последняя версия JPA — 2.2 . Она поддерживает следующие функции:
Java 8, API данных и времени CDI инъекция в AttributeConvertesОн поддерживает аннотацию @Repeatable
JPA: JPA — это стандарт Java-спецификации, предназначенной для доступа, управления и сохранения данных Java-объектов и реляной базы данных. Это стандартный метод ORM.
Hibernate: Это легковесный open source ORM-инструмент для хранения Java-объектов в реляционных базах данных. Это провайдер JPA. Он следует общему методу, предложенному JPA-провайдером.
Ниже приведено описание различий между JPA и Hibernate.
JPA | Hibernate |
JPA используется для маппинга реляционных данных в Java приложениях . | Java спецификация для обработки данных долговечности Hibernate является. |
ORM-фреймворк | JPA не предоставляет никаких реализующих классов. |
Это предоставляет реализующие классы. Он использует JPQL | (Java Persistence Query Language). Он использует свою платформонезависимую языковую платформу, называемую HQL |
Оно определено в язык запросов (Hibernate Query Language). Пакете. org.hibernate | Оно определено в javax.persistence Пакете. org.hibernate |
Оно определено в Hibernate, EclipseLink и других ORM-инструментах. | Hibernate является JPAProvider. |
JPA использует EntityManager Обработка данных долговечности. | В Hibernate используется Сессия Обработка данных долговечности. |
Spring Boot предоставляет запускные зависимости spring-boot-starter-data-jpa Для эффективного использования реляционной базы данных в Spring Boot приложение. spring-boot-starter-data-jpa использует spring-boot-jpa в качестве внутреннего зависимого элемента.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.2.2.RELEASE</version> </dependency>
Мы создаем Spring Boot приложение, которое использует JPA для подключения к базе данных. В следующем примере мы используем-memory database Apache Derby.
Apache Derby : Это嵌入式Open source softwareРеляционная база данных полностью реализована на Java. Она доступна под лицензией Apache License 2.0. Преимущества Apache Derby включают в себя:
Легко устанавливается, развертывается и используется.Он основан на Java, стандартах JDBC и SQL.Это предоставляет вградженную JDBC-драйвер, который позволяет нам встроить Derby в любую решению на Java.Он также поддерживает клиент/серверный режим через JDBC драйвер Derby Network Client и Derby Network Server.
Spring Boot может автоматически конфигурировать встроенные базы данных, такие как H2, HSQL,и Derbydatabases . Мы не нуждаемся в предоставлении никакой URL подключения. Нам нужно только включить зависимости для используемого встроенного базы данных.
В Spring Boot достаточно добавить в pom Derby Зависимости для легкой интеграции базы данных Apache Derby. xml файл.
<dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <scope>runtime</scope> </dependency>
Шаг 1: Откройте Spring Initializr https://start.spring.io/
Шаг 2: Выберите последнюю версию Spring Boot 2.3.0(SNAPSHOT)
Шаг 3: ПредоставленоGroupНазвание. Мы предоставили com.w3codebox.
Шаг 4: ПредоставленоArtifact ID. Мы предоставили apache-derby-example .
Шаг 5: Добавьте зависимости: Spring Web, Spring Data JPAи База данных Apache Derby.
Шаг 6: Нажмите Generate (Создать) кнопка. При нажатии на кнопку "Создать" проект будет упакован в Jar файл и загружен на локальную систему.
Шаг 7: Выкачать Jar файл и вставьте его в рабочую область STS.
Шаг 8: Импорт
Файл-> Импорт-> Существующий Maven проект-> Просмотр-> Выберите папку apache-derby-example-> Готово
Импорт займет некоторое время.
Шаг 9: в папке src/main/javaв созданном com.w3codebox.model в пакете.
Шаг 10: в пакете com.w3codebox.model в созданном UserRecord класса, затем выполните следующее:
Определите три переменные id, name и email.Генерируйте Getter и Setter.
Щелкните правой кнопкой мыши файл-> Источник-> Generate Getter и Setter ОпределитеDefaultныйконструктор.Использование аннотаций @Entity будет классом, помеченным какEntity. Использование аннотаций @Id будет Id Метка является ключом.
UserRecord.java
package com.w3codebox.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default constructor 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: В Создайте папку src/main/java и создайте файл с именем com.w3codebox.controller в пакете.
Шаг 12: в пакете com.w3codebox.controller в созданном UserController Класс Controller, и выполняет следующие действия:
Использование аннотаций @RestController Маркировка класса как контроллера.Использование аннотаций @Autowired Автоматическое подключение класса UserService .Мы определили два маршрута, один из которых используется дляПолучение всех пользователейДля этого используется другой маршрутДобавление пользователя.
UserController.java
package com.w3codebox.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.w3codebox.model.UserRecord; import com.w3codebox.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("/") public List<UserRecord> getAllUser() { return userService.getAllUsers(); } @RequestMapping(value="/add-user", method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } }
步骤13: в папке src/main/java中创建一个名称为 com.w3codebox.service в пакете.
步骤14: в пакете com.w3codebox.service в созданном в UserController 的Service类,并执行以下操作:
通过使用注解 @Service将该类标记为服务。 自动连接 UserRepository 定义方法 getAllUsers(),该方法返回以下列表: 定义另一个方法名称 addUser(),以保存用户记录。
UserService.java
package com.w3codebox.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.w3codebox.model.UserRecord; import com.w3codebox.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List<UserRecord> getAllUsers() { List<UserRecord>userRecords = new ArrayList<>(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } }
Шаг 15: в папке src/main/javaв созданном com.w3codebox.repository в пакете.
Шаг 16: в пакете com.w3codebox.repository в созданном в UserRepository Интерфейс хранилища данных, который расширяет CrudRepository .
UserRepository.java
package com.w3codebox.repository; import org.springframework.data.repository.CrudRepository; import com.w3codebox.model.UserRecord; public interface UserRepository extends CrudRepository<UserRecord, String> { }
Шаг 17: Теперь откройте ApacheDerbyExampleApplication.java файл. Он создается по умолчанию, когда мы настраиваем приложение.
ApacheDerbyExampleApplication.java
package com.w3codebox; 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); } }
Теперь мы настроили все необходимые классы и пакеты в соответствии с требованиями. Обратите внимание, что мы не предоставили никакой базы данныхСсылка на соединение После выполнения всех указанных шагов, директория проекта будет выглядеть следующим образом:
Давайте запустим это приложение.
Шаг 18: Откройте ApacheDerbyExampleApplication.java файл и запустите его в качестве Java-приложения.
Шаг 19: Откройте браузер и вызовите URL http://localhost:8080/. Поскольку в список не было добавлено ни одного пользователя, возвращается пустой список.
Чтобы добавить пользователя в базу данных, мы будем использоватьОтправить POST Запрос Postman.
Шаг 20: ОткройтеPostmanи выполните следующие действия:
Выберите POST Вызовите URL http://localhost:8080/add-user.НажатьBody Выберите Content-Type в качествеJSON (application/json).Вставьте данные, которые нужно вставить в базу данных. Мы вставили следующие данные:
{ "id": "001", "name": "Tom", "email": "[email protected]" }
НажатьОтправитькнопка.
Когда мы нажимаем кнопку "Отправить", она показываетСтатус: 200 OK . Это означает, что запрос был успешно выполнен.
Шаг 21: Откройте браузер и вызовите URL http://localhost: 8080. Оно возвращает пользователей, которые мы вставили в базу данных.