Что такое jpa java
Spring Data на примере JPA
Введение
Spring Data позволяет легче создавать Spring-управляемые приложения которые используют новые способы доступа к данным, например нереляционные базы данных, map-reduce фреймворки, cloud сервисы, а так же уже хорошо улучшенную поддердку реляционных баз данных.
В этой статье будет рассмотрен один из под-проектов Spring Data — JPA
Что может Spring Data — JPA
Для чего вам может понадобиться Spring Data — JPA
Я бы ответил так — если вам нужно быстро в проекте создать Repository слой базируемый на JPA, предназначенный в основном для CRUD операций, и вы не хотите создавать абстрактные дао, интерфейсы их реализации, то Spring Data — JPA это хороший выбор.
С чего начать
Будем считать у вас уже есть maven проект с подключенным Spring, базой данных, настроенным EntityManager-ом.
1. Добавьте артефакт со Spring Data — JPA
2. В ваш applicationContext.xml нужно добавить путь где будут храниться ваши Repository интерфейсы
3. Создать Entity и Repository интерфейс для него
4. Теперь вы можете использовать созданный интерфейс в вашем приложении
Наследовавшись от CrudRepository вы получили возможность вызывать такие методы как:
без необходимости реализовывать их имплементацию.
Работа с запросами, сортировкой, порционной загрузкой
Рассмотрим на примере: вам нужно сделать запрос, который выберет все Test записи, у которых поле «dummy» установленно в false, и записи отсортированны по полю «tries» в порядке ABC.
Для решения такой задачи вы можете выбрать один из нескольких вариантов:
Если с первым способом все предельно просто и это знакомый запрос, то второй способ заключается в том, чтобы составить имя метода, особым способом использую ключевые слова, такие как: «find», «order», имя переменных и тд. Разработчики Spring Data — JPA постарались учесть большинство возможных вариантов, которые могут вам понадобится.
Specification и CriteriaBuilder
Если вам нужно написать действительно сложный запрос для этого вы можете использовать Specification.
Пример в котором в зависимости от «retries» будут выбраны данные с разными значениями «dummy».
Следующий пример покажет как можно использовать созданный Specification для фильтра всех данных.
Расширим ваш интерфейс при помощи JpaSpecificationExecutor
и вызовем метод findAll передав ему созданную Specification
Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 6
Библиотеки и стандарты
52. Что такое Hibernate? В чём разница между JPA и Hibernate?
53. Что такое каскадность? Как она используется в Hibernate?
PERSIST — операции сохранения будут происходить каскадно (для методов save() и persist() ). То есть, если мы сохраняем сущность, связанную с другими сущностями, они также сохраняются в БД (если их ещё там нет)
MERGE — операции обновления будут происходить каскадно (для метода merge() )
REMOVE — операции удаления происходят каскадно (метод remove() )
DETACH — связанные сущности не будут управляться сессией (метод detach() ). То есть, при их изменении не будет автоматического изменения их данных в БД — они переводятся из состояния persistence в detached (сущность, не управляемая JPA)
REFRESH — при каждом обновлении сущности данными из БД ( refresh() — обновляет detached объекты) связанные сущности обновляются так же. Например, вы изменили как-то данные, взятые из БД, и хотите вернуть их изначальные значения. В таком случае вам и пригодится данная операция.
REPLICATE — используется, когда у нас есть более одного источника данных и мы хотим, чтобы данные синхронизировались (метод Hibernate — replicate). У всех сущностей должны быть идентификаторы (id), чтобы не было проблем с их генерацией (чтобы для разных БД одна и та же сущность не имела разных id)
SAVE_UPDATE — каскадное сохранение/удаление (для метода Hibernate — saveOrUpdate )
Если не выбран тип каскадирования, никакая операция с сущностью не будет иметь эффекта для связанных с ней других entity.
54. Может ли Entity класс быть абстрактным?
55. Что такое entity manager? За что отвечает?
56. Что такое класс Assert? Зачем его использовать?
assertTrue( ) — ожидаемое значение, полученное в качестве аргумента, должно быть true
assertFalse( ) — ожидаемое значение, полученное в качестве аргумента, должно быть false
JPA — Краткое руководство
Любое корпоративное приложение выполняет операции с базой данных, сохраняя и извлекая огромные объемы данных. Несмотря на все доступные технологии для управления хранением, разработчики приложений обычно изо всех сил пытаются выполнить операции базы данных эффективно.
Как правило, Java-разработчики используют много кода или используют проприетарную среду для взаимодействия с базой данных, тогда как при использовании JPA нагрузка на взаимодействие с базой данных значительно снижается. Он образует мост между объектными моделями (программа Java) и реляционными моделями (программа базы данных).
Несоответствия между реляционными и объектными моделями
Реляционные объекты представлены в табличном формате, а объектные модели представлены в виде взаимосвязанного графа формата объекта. При сохранении и извлечении объектной модели из реляционной базы данных возникает некоторое несоответствие по следующим причинам:
Гранулярность : объектная модель обладает большей гранулярностью, чем реляционная модель.
Подтипы : Подтипы (означает наследование) поддерживаются не всеми типами реляционных баз данных.
Идентичность : как и объектная модель, реляционная модель не раскрывает идентичность при написании равенства.
Ассоциации : реляционные модели не могут определять множественные отношения при рассмотрении модели предметной области.
Навигация данных. Навигация данных между объектами в объектной сети различна в обеих моделях.
Гранулярность : объектная модель обладает большей гранулярностью, чем реляционная модель.
Подтипы : Подтипы (означает наследование) поддерживаются не всеми типами реляционных баз данных.
Идентичность : как и объектная модель, реляционная модель не раскрывает идентичность при написании равенства.
Ассоциации : реляционные модели не могут определять множественные отношения при рассмотрении модели предметной области.
Навигация данных. Навигация данных между объектами в объектной сети различна в обеих моделях.
Что такое JPA?
Java Persistence API — это набор классов и методов для постоянного хранения огромных объемов данных в базе данных, предоставляемой корпорацией Oracle.
Где использовать JPA?
Чтобы уменьшить нагрузку на написание кодов для управления реляционными объектами, программист следует структуре «JPA Provider», которая позволяет легко взаимодействовать с экземпляром базы данных. Здесь необходимые рамки приняты JPA.
JPA История
В более ранних версиях EJB определенный уровень персистентности сочетался с уровнем бизнес-логики с использованием интерфейса javax.ejb.EntityBean.
При внедрении EJB 3.0 уровень персистентности был отделен и определен как JPA 1.0 (Java Persistence API). Спецификации этого API были выпущены вместе со спецификациями JAVA EE5 11 мая 2006 года с использованием JSR 220.
JPA 2.0 был выпущен со спецификациями JAVA EE6 10 декабря 2009 года как часть процесса сообщества Java JSR 317.
JPA 2.1 был выпущен со спецификацией JAVA EE7 22 апреля 2013 года с использованием JSR 338.
При внедрении EJB 3.0 уровень персистентности был отделен и определен как JPA 1.0 (Java Persistence API). Спецификации этого API были выпущены вместе со спецификациями JAVA EE5 11 мая 2006 года с использованием JSR 220.
JPA 2.0 был выпущен со спецификациями JAVA EE6 10 декабря 2009 года как часть процесса сообщества Java JSR 317.
JPA 2.1 был выпущен со спецификацией JAVA EE7 22 апреля 2013 года с использованием JSR 338.
JPA провайдеры
JPA является API с открытым исходным кодом, поэтому различные корпоративные поставщики, такие как Oracle, Redhat, Eclipse и т. Д., Предоставляют новые продукты, добавляя в них постоянство JPA. Некоторые из этих продуктов включают в себя:
Hibernate, Eclipselink, Toplink, Spring Data JPA и т. Д.
JPA — Архитектура
Java Persistence API является источником для хранения бизнес-сущностей как реляционных сущностей. В нем показано, как определить объект PLAIN OLD JAVA (POJO) как объект и как управлять объектами с отношениями.
Архитектура уровня класса
На следующем рисунке показана архитектура уровня класса JPA. Он показывает основные классы и интерфейсы JPA.
В следующей таблице описан каждый из блоков, показанных в приведенной выше архитектуре.
Единицы | Описание |
---|---|
EntityManagerFactory | Это фабричный класс EntityManager. Он создает и управляет несколькими экземплярами EntityManager. |
EntityManager | Это интерфейс, он управляет операциями сохранения на объектах. Это работает как фабрика для экземпляра Query. |
сущность | Сущности — это постоянные объекты, хранящиеся в виде записей в базе данных. |
EntityTransaction | Он имеет непосредственное отношение к EntityManager. Для каждого EntityManager операции поддерживаются классом EntityTransaction. |
Упорство | Этот класс содержит статические методы для получения экземпляра EntityManagerFactory. |
запрос | Этот интерфейс реализуется каждым поставщиком JPA для получения реляционных объектов, соответствующих критериям. |
Указанные выше классы и интерфейсы используются для хранения сущностей в базе данных в качестве записи. Они помогают программистам, сокращая их усилия по написанию кодов для хранения данных в базе данных, чтобы они могли сосредоточиться на более важных действиях, таких как написание кодов для отображения классов с таблицами базы данных.
JPA Классовые Отношения
В приведенной выше архитектуре отношения между классами и интерфейсами принадлежат пакету javax.persistence. Следующая диаграмма показывает отношения между ними.
JPA — ORM Компоненты
Большинство современных приложений используют реляционную базу данных для хранения данных. В последнее время многие поставщики перешли на объектную базу данных, чтобы снизить нагрузку на обслуживание данных. Это означает, что объектная база данных или объектно-реляционные технологии заботятся о хранении, извлечении, обновлении и обслуживании данных. Основная часть этой объектно-реляционной технологии — это отображение файлов orm.xml. Поскольку xml не требует компиляции, мы можем легко вносить изменения в несколько источников данных с меньшими затратами на администрирование.
Реляционное сопоставление объектов
Объектно-реляционное сопоставление (ORM) кратко рассказывает о том, что такое ORM и как оно работает. ORM — это возможность программирования для преобразования данных из типа объекта в реляционный тип и наоборот.
Основной особенностью ORM является сопоставление или привязка объекта к его данным в базе данных. При отображении мы должны учитывать данные, тип данных и их отношения с собственной сущностью или сущностями в любой другой таблице.
Расширенные возможности
Идиоматическое постоянство : оно позволяет вам писать постоянные классы, используя объектно-ориентированные классы.
Высокая производительность : у него много методов извлечения и многообещающих методов блокировки.
Надежный : он очень стабилен и используется многими профессиональными программистами.
Идиоматическое постоянство : оно позволяет вам писать постоянные классы, используя объектно-ориентированные классы.
Высокая производительность : у него много методов извлечения и многообещающих методов блокировки.
Надежный : он очень стабилен и используется многими профессиональными программистами.
Архитектура ORM
Архитектура ORM выглядит следующим образом.
Вышеприведенная архитектура объясняет, как данные объекта хранятся в реляционной базе данных в три этапа.
Фаза 1
Например, давайте возьмем базу данных сотрудников в качестве схемы.
Класс POJO сотрудника содержит такие атрибуты, как идентификатор, имя, зарплата и обозначение. Он также содержит такие методы, как setter и getter этих атрибутов.
Классы DAO / Service для сотрудников содержат методы обслуживания, такие как создание сотрудников, поиск сотрудников и удаление сотрудников.
Класс POJO сотрудника содержит такие атрибуты, как идентификатор, имя, зарплата и обозначение. Он также содержит такие методы, как setter и getter этих атрибутов.
Классы DAO / Service для сотрудников содержат методы обслуживания, такие как создание сотрудников, поиск сотрудников и удаление сотрудников.
Фаза 2
JPA Provider : это продукт поставщика, который содержит разновидность JPA (javax.persistence). Например, Eclipselink, Toplink, Hibernate и т. Д.
Файл отображения: файл отображения (ORM.xml) содержит конфигурацию отображения между данными в классе POJO и данными в реляционной базе данных.
JPA Loader : JPA Loader работает как кеш-память. Может загружать данные реляционной сетки. Он работает как копия базы данных для взаимодействия с классами обслуживания для данных POJO (атрибуты класса POJO).
Сетка объектов : это временное расположение, в котором может храниться копия реляционных данных, например, кэш-память. Все запросы к базе данных сначала выполняются на данных в сетке объектов. Только после фиксации это влияет на основную базу данных.
JPA Provider : это продукт поставщика, который содержит разновидность JPA (javax.persistence). Например, Eclipselink, Toplink, Hibernate и т. Д.
Файл отображения: файл отображения (ORM.xml) содержит конфигурацию отображения между данными в классе POJO и данными в реляционной базе данных.
JPA Loader : JPA Loader работает как кеш-память. Может загружать данные реляционной сетки. Он работает как копия базы данных для взаимодействия с классами обслуживания для данных POJO (атрибуты класса POJO).
Сетка объектов : это временное расположение, в котором может храниться копия реляционных данных, например, кэш-память. Все запросы к базе данных сначала выполняются на данных в сетке объектов. Только после фиксации это влияет на основную базу данных.
Фаза 3
Mapping.xml
Файл mapping.xml должен дать указание поставщику JPA сопоставить классы сущностей с таблицами базы данных.
Давайте рассмотрим пример объекта Employee, который содержит четыре атрибута. Класс POJO объекта Employee с именем Employee.java выглядит следующим образом:
Приведенный выше скрипт используется для отображения класса сущности с таблицей базы данных. В этом файле
: тег определяет определение схемы, чтобы разрешить теги объекта в XML-файл.
: тег предоставляет описание приложения.
: тег определяет класс сущности, который вы хотите преобразовать в таблицу в базе данных. Класс атрибута определяет имя класса сущности POJO.
: тег определяет имя таблицы. Если вы хотите иметь одинаковые имена как для класса, так и для таблицы, то этот тег не обязателен.
: тег определяет атрибуты (поля в таблице).
: тег используется для определения оставшихся атрибутов для таблицы.
: тег используется для определения пользовательских имен полей таблицы в таблице.
: тег определяет определение схемы, чтобы разрешить теги объекта в XML-файл.
: тег предоставляет описание приложения.
: тег определяет класс сущности, который вы хотите преобразовать в таблицу в базе данных. Класс атрибута определяет имя класса сущности POJO.
: тег определяет имя таблицы. Если вы хотите иметь одинаковые имена как для класса, так и для таблицы, то этот тег не обязателен.
: тег определяет атрибуты (поля в таблице).
: тег используется для определения оставшихся атрибутов для таблицы.
: тег используется для определения пользовательских имен полей таблицы в таблице.
Аннотации
Обычно XML-файлы используются для настройки определенных компонентов или сопоставления двух различных спецификаций компонентов. В нашем случае мы должны поддерживать XML-файлы отдельно в рамках. Это означает, что при написании файла сопоставления xml нам нужно сравнить атрибуты класса POJO с тегами сущностей в файле mapping.xml.
Здесь список аннотаций, используемых в наших примерах, приведен ниже.
аннотирование | Описание |
---|---|
@Сущность | Объявляет класс как сущность или таблицу. |
@Таблица | Объявляет имя таблицы. |
@Basic | Задает необязательные поля в явном виде. |
@Embedded | Определяет свойства класса или объекта, значение которого является экземпляром встраиваемого класса. |
@Я бы | Определяет свойство, используемое для идентификации (первичный ключ таблицы) класса. |
@GeneratedValue | Определяет, как атрибут идентичности может быть инициализирован, например, автоматический, ручной или значение, взятое из таблицы последовательности. |
@Transient | Определяет свойство, которое не является постоянным, т. Е. Значение никогда не сохраняется в базе данных. |
@column | Определяет атрибут столбца для свойства постоянства. |
@SequenceGenerator | Задает значение для свойства, указанного в аннотации @GeneratedValue. Это создает последовательность. |
@TableGenerator | Указывает генератор значений для свойства, указанного в аннотации @GeneratedValue. Создает таблицу для генерации стоимости. |
@AccessType | Этот тип аннотации используется для установки типа доступа. Если вы устанавливаете @AccessType (FIELD), то доступ происходит по полю. Если вы установите @AccessType (PROPERTY), то доступ будет происходить по свойству. |
@JoinColumn | Определяет ассоциацию объекта или коллекцию объектов. Это используется в ассоциациях «многие к одному» и «один ко многим». |
@Уникальное ограничение | Определяет поля и уникальные ограничения для первичной или вторичной таблицы. |
@ColumnResult | Ссылается на имя столбца в запросе SQL, используя предложение select. |
@ManyToMany | Определяет отношение «многие ко многим» между таблицами объединения. |
@ManyToOne | Определяет отношение многие-к-одному между таблицами соединения. |
@Один ко многим | Определяет отношение «один ко многим» между таблицами объединения. |
@Один к одному | Определяет отношение один к одному между таблицами соединения. |
@NamedQueries | указывает список именованных запросов. |
@NamedQuery | Определяет запрос с использованием статического имени. |
Java Bean Standard
Класс Java инкапсулирует значения экземпляров и их поведение в единый модуль, называемый объектом. Java Bean — это временное хранилище и компонент многократного использования или объект. Это сериализуемый класс, который имеет конструктор по умолчанию и методы получения и установки для индивидуальной инициализации атрибутов экземпляра.
Бобовые Соглашения
Бин содержит конструктор по умолчанию или файл, содержащий сериализованный экземпляр. Следовательно, бин может создавать другой бин.
Свойства bean-компонента могут быть разделены на булевы или не-булевы свойства.
Не булево свойство содержит методы получения и установки.
Логическое свойство содержит сеттер и является методом.
Бин содержит конструктор по умолчанию или файл, содержащий сериализованный экземпляр. Следовательно, бин может создавать другой бин.
Свойства bean-компонента могут быть разделены на булевы или не-булевы свойства.
Не булево свойство содержит методы получения и установки.
Логическое свойство содержит сеттер и является методом.
JPA — Установка
В этой главе описан процесс настройки JPA в системах на базе Windows и Linux. JPA можно легко установить и интегрировать в текущую среду Java, выполнив несколько простых шагов без каких-либо сложных процедур настройки. Администрация пользователя требуется при установке.
Системные Требования
JDK | Java SE 2 JDK 1.5 или выше |
объем памяти | 1 ГБ ОЗУ (рекомендуется) |
Дисковое пространство | Нет минимальных требований |
Версия операционной системы | Windows XP или выше, Linux |
Давайте теперь перейдем к шагам по установке JPA.
Шаг 1: Проверьте вашу установку Java
Прежде всего, вам необходимо установить Java Software Development Kit (SDK) в вашей системе. Чтобы убедиться в этом, выполните любую из следующих двух команд в зависимости от платформы, на которой вы работаете.
Если установка Java была выполнена правильно, то на ней отобразится текущая версия и спецификация вашей установки Java. Пример вывода приведен в следующей таблице.
Платформа | команда | Пример вывода | ||||
---|---|---|---|---|---|---|
Windows |
Платформа | Описание |
---|---|
Windows | Установите JAVA_HOME в C: \ ProgramFiles \ java \ jdk1.7.0_60 |
Linux | Экспорт JAVA_HOME = / usr / local / java-current |
Добавьте полный путь расположения компилятора Java к системному пути.
Шаг 3: Установка JPA
Вы можете пройти установку JPA с помощью любого из JPA-провайдеров из этого руководства, например, Eclipselink, Hibernate. Давайте проследим за установкой JPA, используя Eclipselink. Для программирования JPA мы должны следовать определенной структуре папок, поэтому лучше использовать IDE.
Разархивируйте ZIP-файл Eclipse на диске C. Откройте Eclipse IDE.
Установка JPA с использованием Eclipselink
Eclipselink — это библиотека, поэтому мы не можем добавить ее напрямую в Eclipse IDE. Для установки JPA с помощью Eclipselink вам необходимо выполнить шаги, указанные ниже.
Создайте новый проект JPA, выбрав File-> New-> JPA Project в Eclipse IDE следующим образом:
Нажмите на библиотеку загрузки (если у вас нет библиотеки) в разделе пользовательской библиотеки.
Выберите последнюю версию библиотеки Eclipselink в диалоговом окне «Загрузка библиотеки» и нажмите «Далее» следующим образом:
Примите условия лицензии и нажмите Готово для загрузки библиотеки.
6. Загрузка начинается, как показано на следующем снимке экрана.
После загрузки выберите загруженную библиотеку в разделе пользовательских библиотек и нажмите «Готово».
Наконец, вы получаете файл проекта в Package Explorer в Eclipse IDE. Распакуйте все файлы, вы получите папку и файловую иерархию следующим образом:
Создайте новый проект JPA, выбрав File-> New-> JPA Project в Eclipse IDE следующим образом:
Нажмите на библиотеку загрузки (если у вас нет библиотеки) в разделе пользовательской библиотеки.
Выберите последнюю версию библиотеки Eclipselink в диалоговом окне «Загрузка библиотеки» и нажмите «Далее» следующим образом:
Примите условия лицензии и нажмите Готово для загрузки библиотеки.
6. Загрузка начинается, как показано на следующем снимке экрана.
После загрузки выберите загруженную библиотеку в разделе пользовательских библиотек и нажмите «Готово».
Наконец, вы получаете файл проекта в Package Explorer в Eclipse IDE. Распакуйте все файлы, вы получите папку и файловую иерархию следующим образом:
Добавление MySQL-коннектора в Project
Любой пример, который мы здесь обсуждаем, требует подключения к базе данных. Давайте рассмотрим базу данных MySQL для операций с базой данных. Для взаимодействия с Java-программой требуется jar-файл mysql-connector.
Следуйте инструкциям для настройки JAR базы данных в вашем проекте.
Перейдите в Свойства проекта -> Путь сборки Java, щелкнув по нему правой кнопкой мыши. Вы получите диалоговое окно, как показано на следующем снимке экрана. Нажмите на Добавить внешние банки.
Перейдите в папку с банкой в системной памяти, выберите файл и нажмите «Открыть».
Нажмите ОК в диалоговом окне свойств. Вы получите MySQL-коннектор Jar в свой проект. Теперь вы можете выполнять операции с базой данных, используя MySQL.
Перейдите в Свойства проекта -> Путь сборки Java, щелкнув по нему правой кнопкой мыши. Вы получите диалоговое окно, как показано на следующем снимке экрана. Нажмите на Добавить внешние банки.
Перейдите в папку с банкой в системной памяти, выберите файл и нажмите «Открыть».
Нажмите ОК в диалоговом окне свойств. Вы получите MySQL-коннектор Jar в свой проект. Теперь вы можете выполнять операции с базой данных, используя MySQL.
JPA — Entity Managers
Эта глава использует простой пример, чтобы продемонстрировать, как работает JPA. Давайте рассмотрим управление сотрудниками в качестве примера. Предположим, что Управление сотрудника создает, обновляет, находит и удаляет записи сотрудника. Как уже упоминалось, мы используем базу данных MySQL для операций базы данных.
- Что такое joy money
- Что такое jpeg снимки