JPA - Componentes ORM

A maioria dos aplicativos contemporâneos usa banco de dados relacional para armazenar dados. Recentemente, muitos fornecedores mudaram para o banco de dados objeto para reduzir sua carga na manutenção de dados. Significa que o banco de dados de objetos ou as tecnologias relacionais de objetos estão cuidando do armazenamento, recuperação, atualização e manutenção. A parte principal das tecnologias relacionais desse objeto é o mapeamento do arquivo orm.xml. Como o xml não requer compilação, podemos facilmente fazer alterações em várias fontes de dados com menos administração.

Mapeamento Relacional de Objeto

O Mapeamento Relacional a Objetos (ORM) informa brevemente sobre o que é o ORM e como ele funciona. ORM é uma capacidade de programação para ocultar dados do tipo de objeto para o tipo relacional e vice-versa.

O principal recurso do ORM é mapear ou vincular um objeto aos seus dados no banco de dados. Durante o mapeamento, precisamos considerar os dados, o tipo de dados e suas relações com sua auto-entidade ou entidade em qualquer outra tabela.

Características avançadas

  • Persistência linguística : permite escrever as classes de persistência usando classes orientadas a objetos.

  • Alto desempenho : Possui muitas técnicas de busca e técnicas de bloqueio esperançosas.

  • Confiável : É altamente estável e eminente. Usado por muitos programadores industriais.

Arquitetura ORM

Aqui segue a arquitetura ORM.

Mapeamento Relacional de Objeto

A arquitetura acima explica como os dados do objeto são armazenados no banco de dados relacional em três fases.

Fase 1

A primeira fase, denominada fase de dados do objeto , contém classes POJO, interfaces de serviço e classes. É a principal camada de componente de negócios, que possui operações e atributos de lógica de negócios.

Por exemplo, tomemos um banco de dados de funcionários como esquema.

  • A classe POJO do funcionário contém atributos como ID, nome, salário e designação. E métodos como métodos setter e getter desses atributos.

  • As classes DAO / Serviço do funcionário contêm métodos de serviço, como criar funcionário, localizar funcionário e excluir funcionário.

Fase 2

A segunda fase denominada fase de mapeamento ou persistência , que contém o provedor JPA, o arquivo de mapeamento (ORM.xml), o JPA Loader e a Grade de Objetos.

  • Fornecedor JPA : O produto do fornecedor que contém o sabor JPA (javax.persistence). Por exemplo, link Eclipse , Toplink, Hibernate, etc.

  • Arquivo de mapeamento : O arquivo de mapeamento (ORM.xml) contém a configuração de mapeamento entre os dados em uma classe POJO e os dados em um banco de dados relacional.

  • Carregador JPA : O carregador JPA funciona como memória cache, que pode carregar os dados da grade relacional. Funciona como uma cópia do banco de dados para interagir com as classes de serviço dos dados POJO (Atributos da classe POJO).

  • Grade de objetos : a grade de objetos é um local temporário que pode armazenar a cópia de dados relacionais, ou seja, como uma memória cache. Todas as consultas no banco de dados são efetuadas primeiro nos dados na grade de objetos. Somente depois de confirmado, ele afeta o banco de dados principal.

Fase 3

A terceira fase é a fase de dados relacionais. Ele contém os dados relacionais conectados logicamente ao componente de negócios. Como discutido acima, somente quando o componente de negócios confirma os dados, eles são armazenados no banco de dados fisicamente. Até então, os dados modificados são armazenados na memória cache como um formato de grade. O mesmo é o processo para obter dados.

O mecanismo da interação programática das três fases acima é chamado de mapeamento relacional de objetos.

Mapping.xml

O arquivo mapping.xml deve instruir o fornecedor JPA a mapear as classes de entidade com tabelas de banco de dados.

Vamos dar um exemplo da entidade Employee, que contém quatro atributos. A classe POJO da entidade Employee denominada Employee.java é a seguinte:

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;
   }
}

O código acima é a classe POJO da entidade Employee. Ele contém quatro atributos eid, ename, salário e deg. Considere esses atributos como os campos da tabela no banco de dados e eid é a chave principal desta tabela. Agora temos que projetar o arquivo de mapeamento de hibernação para ele. O arquivo de mapeamento denominado mapping.xml é o seguinte:

<? 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>

O script acima para mapear a classe da entidade com a tabela do banco de dados. Neste arquivo

  • <entity-mappings> : tag define a definição do esquema para permitir tags de entidade no arquivo xml.

  • <description> : tag define a descrição do aplicativo.

  • <entity> : tag define a classe de entidade que você deseja converter em tabela em um banco de dados. A classe de atributo define o nome da classe da entidade POJO.

  • <table> : tag define o nome da tabela. Se você deseja manter o nome da classe como nome da tabela, essa tag não é necessária.

  • <atributes> : tag define os atributos (campos em uma tabela).

  • <id> : tag define a chave primária da tabela. A tag <generated-value> define como atribuir o valor da chave primária, como Automático, Manual ou extraído da Sequência.

  • <basic> : tag é usada para definir os atributos restantes da tabela.

  • <nome da coluna> : a tag é usada para definir o nome do campo da tabela definido pelo usuário.

Anotações

Geralmente, os arquivos XML são usados para configurar um componente específico ou mapear duas especificações diferentes de componentes. No nosso caso, precisamos manter o xml separadamente em uma estrutura. Isso significa que, ao escrever um arquivo xml de mapeamento, precisamos comparar os atributos da classe POJO com as tags de entidade no arquivo mapping.xml.

Aqui está a solução: Na definição da classe, podemos escrever a parte da configuração usando anotações. As anotações são usadas para classes, propriedades e métodos. As anotações começam com o símbolo '@'. As anotações são declaradas antes da classe, propriedade ou método ser declarado. Todas as anotações do JPA são definidas no pacote javax.persistence.

Segue a lista de anotações usadas em nossos exemplos

Anotação Descrição
@Entidade Esta anotação especifica para declarar a classe como entidade ou uma tabela.
@Mesa Esta anotação especifica para declarar o nome da tabela.
@Basic Esta anotação especifica campos sem restrição explicitamente.
@Embutido Esta anotação especifica as propriedades da classe ou de uma entidade cuja instância de valor de uma classe incorporável.
@Eu iria Esta anotação especifica a propriedade, use para identidade (chave primária de uma tabela) da classe.
@GeneratedValue Esta anotação especifica como o atributo de identidade pode ser inicializado, como Automático, manual ou valor obtido da tabela de sequência.
@Transient Esta anotação especifica a propriedade que não é persistente, ou seja, o valor nunca é armazenado no banco de dados.
@Coluna Esta anotação é usada para especificar uma coluna ou atributo para a propriedade de persistência.
@SequenceGenerator Esta anotação é usada para definir o valor da propriedade especificada na anotação @GeneratedValue. Cria uma sequência.
@TableGenerator Esta anotação é usada para especificar o gerador de valor para a propriedade especificada na anotação @GeneratedValue. Ele cria uma tabela para geração de valor.
@Tipo de acesso Este tipo de anotação é usado para definir o tipo de acesso. Se você definir @AccessType (FIELD), o acesso em campo ocorrerá. Se você definir @AccessType (PROPERTY), a avaliação por propriedade ocorrerá.
@JoinColumn Esta anotação é usada para especificar uma associação ou coleção de entidades. Isso é usado em associações muitos-para-um e um-para-muitos.
@Restrição única Esta anotação é usada para especificar o campo, restrição exclusiva para tabela primária ou secundária.
@ColumnResult Esta anotação faz referência ao nome de uma coluna na consulta SQL usando a cláusula select.
@Muitos para muitos Essa anotação é usada para definir um relacionamento muitos para muitos entre as Tabelas de junção.
@ManyToOne Esta anotação é usada para definir um relacionamento muitos-para-um entre as tabelas de junção.
@Um para muitos Essa anotação é usada para definir um relacionamento um para muitos entre as Tabelas de junção.
@Um a um Esta anotação é usada para definir um relacionamento individual entre as Tabelas de junção.
@NamedQueries Esta anotação é usada para especificar a lista de consultas nomeadas.
@NamedQuery Esta anotação é usada para especificar uma consulta usando o nome estático.

Padrão Java Bean

A classe Java encapsula os valores e comportamentos da instância em um único objeto chamado de unidade. O Java Bean é um armazenamento temporário e um componente ou objeto reutilizável. É uma classe serializável que possui métodos construtores e getter e setter padrão para inicializar os atributos da instância individualmente.

Convenções de Bean

  • Bean contém o construtor padrão ou um arquivo que contém a instância serializada. Portanto, um bean pode instanciar o bean.

  • As propriedades de um bean podem ser segregadas em propriedades booleanas e não booleanas.

  • A propriedade não booleana contém métodos getter e setter .

  • A propriedade booleana contém setter e é o método

  • O método Getter de qualquer propriedade deve começar com letras minúsculas 'get' (convenção do método java) e continuar com um nome de campo que comece com letras maiúsculas. Por exemplo, o nome do campo é 'salário', portanto, o método getter desse campo é 'getSalary ()'.

  • O método setter de qualquer propriedade deve começar com 'set' com letras pequenas (convenção do método java), continuado com um nome de campo que começa com letra maiúscula e o valor do argumento a ser definido como field. Por exemplo, o nome do campo é 'salário', portanto, o método setter deste campo é 'setSalary (double sal)'.

  • Para propriedade booleana, é um método para verificar se é verdadeiro ou falso. Por exemplo, a propriedade booleana 'vazia', o método is deste campo é 'isEmpty ()'.