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