JPA-ORM-Komponenten

Die meisten modernen Anwendungen verwenden relationale Datenbanken zum Speichern von Daten. In letzter Zeit haben viele Anbieter auf Objektdatenbanken umgestellt, um die Datenpflege zu entlasten. Dies bedeutet, dass Objektdatenbanken oder objektrelationale Technologien das Speichern, Abrufen, Aktualisieren und Warten übernehmen. Der Kern dieser objektrelationalen Technologien ist die Zuordnung der Datei orm.xml. Da für XML keine Kompilierung erforderlich ist, können wir mit weniger Verwaltungsaufwand problemlos Änderungen an mehreren Datenquellen vornehmen.

Objektrelationale Zuordnung

In Object Relational Mapping (ORM) erfahren Sie kurz, was ORM ist und wie es funktioniert. ORM ist eine Programmierfunktion, mit der Daten vom Objekttyp zum relationalen Typ und umgekehrt verdeckt werden können.

Das Hauptmerkmal von ORM ist das Zuordnen oder Binden eines Objekts an seine Daten in der Datenbank. Bei der Zuordnung müssen wir die Daten, den Datentyp und ihre Beziehungen zu ihrer Selbstentität oder Entität in einer anderen Tabelle berücksichtigen.

Erweiterte Funktionen

  • Idiomatic persistence : Sie können die Persistenzklassen mit objektorientierten Klassen schreiben.

  • High Performance : Es hat viele Abruftechniken und hoffnungsvolle Verriegelungstechniken.

  • Reliable: Es ist sehr stabil und hervorragend. Wird von vielen Industrieprogrammierern verwendet.

ORM-Architektur

Hier folgen Sie der ORM-Architektur.

Die obige Architektur erklärt, wie Objektdaten in drei Phasen in einer relationalen Datenbank gespeichert werden.

Phase 1

Die erste Phase, benannt als Object dataPhase enthält POJO-Klassen, Serviceschnittstellen und Klassen. Es ist die Hauptschicht der Geschäftskomponenten, die Geschäftslogikoperationen und -attribute aufweist.

Nehmen wir zum Beispiel eine Mitarbeiterdatenbank als Schema.

  • Die POJO-Klasse der Mitarbeiter enthält Attribute wie ID, Name, Gehalt und Bezeichnung. Und Methoden wie Setter- und Getter-Methoden dieser Attribute.

  • Mitarbeiter-DAO / Service-Klassen enthalten Servicemethoden wie Mitarbeiter erstellen, Mitarbeiter suchen und Mitarbeiter löschen.

Phase 2

Die zweite Phase mit dem Namen mapping oder persistence Phase, die den JPA-Anbieter, die Zuordnungsdatei (ORM.xml), den JPA-Loader und das Objektraster enthält.

  • JPA Provider: Das Herstellerprodukt, das JPA-Geschmack enthält (javax.persistence). Zum Beispiel Eclipselink, Toplink, Hibernate usw.

  • Mapping file : Die Zuordnungsdatei (ORM.xml) enthält die Zuordnungskonfiguration zwischen den Daten in einer POJO-Klasse und den Daten in einer relationalen Datenbank.

  • JPA Loader: Der JPA-Loader funktioniert wie ein Cache-Speicher, der die relationalen Grid-Daten laden kann. Es funktioniert wie eine Kopie der Datenbank, um mit Serviceklassen für POJO-Daten (Attribute der POJO-Klasse) zu interagieren.

  • Object Grid: Das Objektraster ist ein temporärer Speicherort, an dem die Kopie relationaler Daten gespeichert werden kann, z. B. ein Cache-Speicher. Alle Abfragen für die Datenbank werden zuerst für die Daten im Objektraster ausgeführt. Erst nachdem es festgeschrieben wurde, wirkt es sich auf die Hauptdatenbank aus.

Phase 3

Die dritte Phase ist die relationale Datenphase. Es enthält die relationalen Daten, die logisch mit der Geschäftskomponente verbunden sind. Wie oben erläutert, werden die Daten nur dann physisch in der Datenbank gespeichert, wenn die Geschäftskomponente die Daten festschreibt. Bis dahin werden die geänderten Daten als Grid-Format in einem Cache-Speicher gespeichert. Gleiches gilt für das Abrufen von Daten.

Der Mechanismus der programmatischen Interaktion der obigen drei Phasen wird als objektrelationale Abbildung bezeichnet.

Mapping.xml

Die Datei maps.xml soll den JPA-Anbieter anweisen, die Entitätsklassen mit Datenbanktabellen zuzuordnen.

Nehmen wir ein Beispiel für eine Mitarbeiterentität, die vier Attribute enthält. Die POJO-Klasse der benannten Employee-EntitätEmployee.java ist wie folgt:

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

Der obige Code ist die POJO-Klasse der Employee-Entität. Es enthält vier Attribute eid, ename, Gehalt und Grad. Beachten Sie, dass diese Attribute die Tabellenfelder in der Datenbank sind und eid der Primärschlüssel dieser Tabelle ist. Jetzt müssen wir die Zuordnungsdatei für den Ruhezustand dafür entwerfen. Die Zuordnungsdatei mit dem Namenmapping.xml ist wie folgt:

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

Das obige Skript zum Zuordnen der Entitätsklasse zur Datenbanktabelle. In dieser Datei

  • <entity-mappings> : tag definiert die Schemadefinition, um Entitäts-Tags in XML-Dateien zuzulassen.

  • <description> : tag definiert die Beschreibung der Anwendung.

  • <entity>: tag definiert die Entitätsklasse, die Sie in eine Tabelle in einer Datenbank konvertieren möchten. Die Attributklasse definiert den Namen der POJO-Entitätsklasse.

  • <table>: tag definiert den Tabellennamen. Wenn Sie den Klassennamen als Tabellennamen beibehalten möchten, ist dieses Tag nicht erforderlich.

  • <attributes> : tag definiert die Attribute (Felder in einer Tabelle).

  • <id>: tag definiert den Primärschlüssel der Tabelle. Das<generated-value> Tag definiert, wie der Primärschlüsselwert zugewiesen wird, z. B. Automatisch, Manuell oder aus der Sequenz entnommen.

  • <basic> : Tag wird zum Definieren der verbleibenden Attribute für die Tabelle verwendet.

  • <column-name> : tag wird verwendet, um den benutzerdefinierten Tabellenfeldnamen zu definieren.

Anmerkungen

Im Allgemeinen werden XML-Dateien verwendet, um bestimmte Komponenten zu konfigurieren oder zwei verschiedene Spezifikationen von Komponenten zuzuordnen. In unserem Fall müssen wir XML separat in einem Framework verwalten. Das bedeutet, dass wir beim Schreiben einer Mapping-XML-Datei die POJO-Klassenattribute mit Entity-Tags in der Mapping.xml-Datei vergleichen müssen.

Hier ist die Lösung: In der Klassendefinition können wir den Konfigurationsteil mithilfe von Anmerkungen schreiben. Die Anmerkungen werden für Klassen, Eigenschaften und Methoden verwendet. Anmerkungen beginnen mit dem Symbol '@'. Anmerkungen werden deklariert, bevor die Klasse, Eigenschaft oder Methode deklariert wird. Alle Anmerkungen von JPA sind im Paket javax.persistence definiert.

Hier folgt die Liste der in unseren Beispielen verwendeten Anmerkungen

Anmerkung Beschreibung
@Entität Diese Anmerkung gibt an, dass die Klasse als Entität oder Tabelle deklariert werden soll.
@Tabelle Diese Anmerkung gibt an, dass der Tabellenname deklariert werden soll.
@Basic Diese Anmerkung gibt explizit Felder ohne Einschränkungen an.
@Eingebettet Diese Annotation gibt die Eigenschaften einer Klasse oder einer Entität an, deren Wertinstanz einer einbettbaren Klasse ist.
@Ich würde Diese Anmerkung gibt die Eigenschaft an, die für die Identität (Primärschlüssel einer Tabelle) der Klasse verwendet wird.
@GeneratedValue Diese Anmerkung gibt an, wie das Identitätsattribut initialisiert werden kann, z. B. Automatisch, Manuell oder Wert aus der Sequenztabelle.
@Transient Diese Anmerkung gibt die Eigenschaft an, die nicht persistent ist, dh der Wert wird niemals in der Datenbank gespeichert.
@Säule Diese Anmerkung wird verwendet, um eine Spalte oder ein Attribut für die Persistenz-Eigenschaft anzugeben.
@SequenceGenerator Diese Annotation wird verwendet, um den Wert für die Eigenschaft zu definieren, der in der Annotation @GeneratedValue angegeben ist. Es wird eine Sequenz erstellt.
@ TableGenerator Diese Annotation wird verwendet, um den Wertgenerator für die in der Annotation @GeneratedValue angegebene Eigenschaft anzugeben. Es wird eine Tabelle zur Wertschöpfung erstellt.
@Zugangsart Diese Art von Anmerkung wird verwendet, um den Zugriffstyp festzulegen. Wenn Sie @AccessType (FIELD) festlegen, erfolgt ein feldweiser Zugriff. Wenn Sie @AccessType (PROPERTY) festlegen, erfolgt eine eigenschaftsbezogene Bewertung.
@ JoinColumn Diese Anmerkung wird verwendet, um eine Entitätszuordnung oder Entitätssammlung anzugeben. Dies wird in vielen-zu-eins- und eins-zu-vielen-Assoziationen verwendet.
@Einzigartige Beschränkung Diese Anmerkung wird verwendet, um das Feld und die eindeutige Einschränkung für die primäre oder sekundäre Tabelle anzugeben.
@ColumnResult Diese Anmerkung verweist mit der select-Klausel auf den Namen einer Spalte in der SQL-Abfrage.
@Viel zu viel Diese Anmerkung wird verwendet, um eine Viele-zu-Viele-Beziehung zwischen den Verknüpfungstabellen zu definieren.
@ManyToOne Diese Anmerkung wird verwendet, um eine Viele-zu-Eins-Beziehung zwischen den Verknüpfungstabellen zu definieren.
@ OneToMany Diese Anmerkung wird verwendet, um eine Eins-zu-Viele-Beziehung zwischen den Verknüpfungstabellen zu definieren.
@Eins zu eins Diese Anmerkung wird verwendet, um eine Eins-zu-Eins-Beziehung zwischen den Verknüpfungstabellen zu definieren.
@NamedQueries Diese Anmerkung wird zum Angeben einer Liste benannter Abfragen verwendet.
@NamedQuery Diese Anmerkung wird zum Angeben einer Abfrage unter Verwendung eines statischen Namens verwendet.

Java Bean Standard

Die Java-Klasse kapselt die Instanzwerte und Verhaltensweisen in ein einzelnes Objekt mit der Bezeichnung "Einheit". Java Bean ist eine temporäre Speicher- und wiederverwendbare Komponente oder ein Objekt. Es handelt sich um eine serialisierbare Klasse mit Standardmethoden für Konstruktor und Getter & Setter, mit denen die Instanzattribute einzeln initialisiert werden können.

Bohnenkonventionen

  • Bean enthält den Standardkonstruktor oder eine Datei, die eine serialisierte Instanz enthält. Daher kann eine Bohne die Bohne instanziieren.

  • Die Eigenschaften einer Bean können in boolesche Eigenschaften und nicht-boolesche Eigenschaften unterteilt werden.

  • Nicht-Boolesche Eigenschaft enthält getter und setter Methoden.

  • Boolesche Eigenschaft enthalten setter und is Methode.

  • GetterDie Methode einer Eigenschaft sollte mit einem kleinen Buchstaben 'get' (Java-Methodenkonvention) beginnen und mit einem Feldnamen fortgesetzt werden, der mit einem Großbuchstaben beginnt. ZB lautet der Feldname 'Gehalt', daher lautet die Getter-Methode dieses Felds 'getSalary ()'.

  • SetterDie Methode einer Eigenschaft sollte mit einem kleinen Buchstaben 'set' (Java-Methodenkonvention) beginnen und mit einem Feldnamen fortgesetzt werden, der mit einem Großbuchstaben beginnt, und dem Argumentwert, der auf field gesetzt werden soll. ZB lautet der Feldname 'Gehalt', daher lautet die Setter-Methode dieses Feldes 'setSalary (double sal)'.

  • Ist für die Boolesche Eigenschaft eine Methode, um zu überprüfen, ob sie wahr oder falsch ist. Beispiel: Die boolesche Eigenschaft 'leer', die is-Methode dieses Feldes ist 'isEmpty ()'.