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 ().