JPA - Компоненты ORM
Большинство современных приложений используют реляционную базу данных для хранения данных. В последнее время многие производители перешли на объектную базу данных, чтобы снизить нагрузку на обслуживание данных. Это означает, что объектная база данных или объектно-реляционные технологии заботятся о хранении, извлечении, обновлении и обслуживании. Ядром этой объектно-реляционной технологии является отображение файла orm.xml. Поскольку xml не требует компиляции, мы можем легко вносить изменения в несколько источников данных с меньшими затратами на администрирование.
Объектно-реляционное отображение
Объектно-реляционное отображение (ORM) вкратце расскажет вам о том, что такое ORM и как оно работает. ORM - это программная способность скрывать данные от объектного типа к реляционному и наоборот.
Основная особенность ORM - это сопоставление или привязка объекта к его данным в базе данных. При отображении мы должны учитывать данные, тип данных и их отношения с собственной сущностью или сущностью в любой другой таблице.
Расширенные возможности
Idiomatic persistence : Это позволяет вам писать классы сохраняемости, используя объектно-ориентированные классы.
High Performance : Он имеет много методов извлечения и многообещающих методов блокировки.
Reliable: Он очень стабильный и выдающийся. Используется многими промышленными программистами.
ORM Архитектура
Здесь следуйте архитектуре ORM.
Вышеупомянутая архитектура объясняет, как данные объекта хранятся в реляционной базе данных в три этапа.
Фаза 1
Первый этап, названный Object dataфаза содержит классы POJO, сервисные интерфейсы и классы. Это основной уровень бизнес-компонентов, который имеет операции и атрибуты бизнес-логики.
Например, возьмем базу данных сотрудников как схему -
Класс POJO сотрудника содержит такие атрибуты, как идентификатор, имя, зарплата и должность. И такие методы, как методы установки и получения этих атрибутов.
Классы Employee DAO / Service содержат методы обслуживания, такие как создание сотрудника, поиск сотрудника и удаление сотрудника.
Фаза 2
Вторая фаза, названная mapping или же persistence фаза, которая содержит поставщика JPA, файл сопоставления (ORM.xml), загрузчик JPA и сетку объектов.
JPA Provider: Продукт поставщика, содержащий вариант JPA (javax.persistence). Например, Eclipselink, Toplink, Hibernate и т. Д.
Mapping file : Файл сопоставления (ORM.xml) содержит конфигурацию сопоставления между данными в классе POJO и данными в реляционной базе данных.
JPA Loader: Загрузчик JPA работает как кеш-память, которая может загружать данные реляционной сетки. Он работает как копия базы данных для взаимодействия с классами обслуживания для данных POJO (атрибуты класса POJO).
Object Grid: Сетка объектов - это временное место, где может храниться копия реляционных данных, например, как кэш-память. Все запросы к базе данных сначала выполняются на данных в сетке объектов. Только после фиксации он влияет на основную базу данных.
Фаза 3
Третий этап - это этап реляционных данных. Он содержит реляционные данные, которые логически связаны с бизнес-компонентом. Как обсуждалось выше, только когда бизнес-компонент фиксирует данные, они физически сохраняются в базе данных. До тех пор измененные данные хранятся в кэш-памяти в виде сетки. То же самое и для получения данных.
Механизм программного взаимодействия вышеупомянутых трех фаз называется объектно-реляционным отображением.
Mapping.xml
Файл mapping.xml предназначен для того, чтобы указать поставщику JPA сопоставить классы Entity с таблицами базы данных.
Давайте возьмем пример сущности Employee, которая содержит четыре атрибута. Класс POJO сущности Employee с именемEmployee.java как следует:
public class Employee {
private int eid;
private String ename;
private double salary;
private String deg;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
}
Приведенный выше код является классом POJO сущности Employee. Он содержит четыре атрибута: eid, ename, salary и deg. Считайте, что эти атрибуты - это поля таблицы в базе данных, а eid - первичный ключ этой таблицы. Теперь нам нужно создать для него файл сопоставления гибернации. Файл сопоставления с именемmapping.xml как следует:
<? xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<description> XML Mapping file</description>
<entity class="Employee">
<table name="EMPLOYEETABLE"/>
<attributes>
<id name="eid">
<generated-value strategy="TABLE"/>
</id>
<basic name="ename">
<column name="EMP_NAME" length="100"/>
</basic>
<basic name="salary">
</basic>
<basic name="deg">
</basic>
</attributes>
</entity>
</entity-mappings>
Приведенный выше сценарий для сопоставления класса сущности с таблицей базы данных. В этом файле
<entity-mappings> : tag определяет определение схемы, чтобы разрешить использование тегов сущностей в XML-файле.
<description> : тег определяет описание приложения.
<entity>: tag определяет класс сущности, который вы хотите преобразовать в таблицу в базе данных. Класс атрибута определяет имя класса сущности POJO.
<table>: тег определяет имя таблицы. Если вы хотите сохранить имя класса как имя таблицы, этот тег не нужен.
<attributes> : тег определяет атрибуты (поля в таблице).
<id>: tag определяет первичный ключ таблицы. В<generated-value> тег определяет, как назначить значение первичного ключа, такое как автоматическое, ручное или взятое из последовательности.
<basic> : тег используется для определения остальных атрибутов таблицы.
<column-name> : тег используется для определения пользовательского имени поля таблицы.
Аннотации
Обычно файлы Xml используются для настройки определенного компонента или сопоставления двух различных спецификаций компонентов. В нашем случае мы должны поддерживать xml отдельно во фреймворке. Это означает, что при написании файла сопоставления xml нам необходимо сравнить атрибуты класса POJO с тегами сущностей в файле mapping.xml.
Вот решение: в определении класса мы можем написать часть конфигурации, используя аннотации. Аннотации используются для классов, свойств и методов. Аннотации начинаются с символа «@». Аннотации объявляются до объявления класса, свойства или метода. Все аннотации JPA определены в пакете javax.persistence.
Далее следует список аннотаций, используемых в наших примерах.
Аннотации | Описание |
---|---|
@Сущность | Эта аннотация указывает, что класс следует объявить как объект или таблицу. |
@Стол | Эта аннотация указывает на объявление имени таблицы. |
@Basic | Эта аннотация явно определяет поля без ограничений. |
@ Встроенный | Эта аннотация определяет свойства класса или сущности, чей экземпляр значения внедряемого класса. |
@Я бы | Эта аннотация указывает свойство, используемое для идентификации (первичный ключ таблицы) класса. |
@GeneratedValue | Эта аннотация указывает, как атрибут идентификации может быть инициализирован, например, автоматически, вручную или значение, взятое из таблицы последовательности. |
@Transient | Эта аннотация указывает свойство, которое не является постоянным, т.е. значение никогда не сохраняется в базе данных. |
@ Столбец | Эта аннотация используется для указания столбца или атрибута для свойства постоянства. |
@SequenceGenerator | Эта аннотация используется для определения значения свойства, указанного в аннотации @GeneratedValue. Создает последовательность. |
@TableGenerator | Эта аннотация используется для указания генератора значений для свойства, указанного в аннотации @GeneratedValue. Он создает таблицу для создания стоимости. |
@AccessType | Этот тип аннотации используется для установки типа доступа. Если вы установите @AccessType (FIELD), тогда будет осуществляться доступ с полевой информацией. Если вы установите @AccessType (PROPERTY), то будет произведена оценка свойств. |
@JoinColumn | Эта аннотация используется для указания ассоциации сущностей или коллекции сущностей. Это используется в ассоциациях «многие к одному» и «один ко многим». |
@Уникальное ограничение | Эта аннотация используется для указания поля, уникального ограничения для первичной или вторичной таблицы. |
@ColumnResult | Эта аннотация ссылается на имя столбца в запросе SQL с помощью предложения select. |
@ManyToMany | Эта аннотация используется для определения отношения «многие ко многим» между таблицами соединения. |
@ManyToOne | Эта аннотация используется для определения отношения «многие к одному» между таблицами соединения. |
@Один ко многим | Эта аннотация используется для определения отношения «один ко многим» между таблицами соединения. |
@Один к одному | Эта аннотация используется для определения однозначной связи между таблицами соединения. |
@NamedQueries | Эта аннотация используется для указания списка именованных запросов. |
@NamedQuery | Эта аннотация используется для указания запроса с использованием статического имени. |
Стандарт Java Bean
Класс Java инкапсулирует значения экземпляра и поведение в единый вызываемый объект. Java Bean - это временное хранилище и многократно используемый компонент или объект. Это сериализуемый класс, который имеет конструктор по умолчанию и методы получения и установки для индивидуальной инициализации атрибутов экземпляра.
Бин-соглашения
Компонент содержит конструктор по умолчанию или файл, содержащий сериализованный экземпляр. Следовательно, компонент может создать его экземпляр.
Свойства bean-компонента могут быть разделены на логические свойства и небулевы свойства.
Небулева свойство содержит getter и setter методы.
Логическое свойство содержать setter и is метод.
GetterМетод любого свойства должен начинаться с маленькой буквы «get» (соглашение о методах Java) и продолжаться именем поля, которое начинается с заглавной буквы. Например, имя поля - «зарплата», поэтому метод получения этого поля - «getSalary ()».
SetterМетод любого свойства должен начинаться с маленькой буквы «set» (соглашение о методах Java), продолжаться именем поля, которое начинается с заглавной буквы, и значением аргумента, которое нужно установить в field. Например, имя поля - «зарплата», поэтому метод установки этого поля - «setSalary (double sal)».
Для свойства Boolean это метод проверки, истинно оно или ложно. Например, логическое свойство empty, метод is для этого поля - isEmpty ().