JPA-ORMコンポーネント

最新のアプリケーションのほとんどは、リレーショナルデータベースを使用してデータを格納しています。最近、多くのベンダーがデータ保守の負担を軽減するためにオブジェクトデータベースに切り替えました。これは、オブジェクトデータベースまたはオブジェクトリレーショナルテクノロジが、保存、取得、更新、および保守を処理していることを意味します。このオブジェクトリレーショナルテクノロジのコア部分は、orm.xmlファイルのマッピングです。xmlはコンパイルを必要としないため、少ない管理で複数のデータソースに簡単に変更を加えることができます。

オブジェクトリレーショナルマッピング

オブジェクトリレーショナルマッピング(ORM)は、ORMとは何かとその仕組みについて簡単に説明します。ORMは、オブジェクトタイプからリレーショナルタイプに、またはその逆にデータを変換するプログラミング機能です。

ORMの主な機能は、オブジェクトをデータベース内のデータにマッピングまたはバインドすることです。マッピングする際には、データ、データのタイプ、および他のテーブル内の自己エンティティまたはエンティティとの関係を考慮する必要があります。

高度な機能

  • Idiomatic persistence :オブジェクト指向クラスを使用して永続性クラスを作成できます。

  • High Performance :多くのフェッチ技術と希望に満ちたロック技術があります。

  • Reliable:安定性が高く、抜群です。多くの産業プログラマーによって使用されます。

ORMアーキテクチャ

ここでは、ORMアーキテクチャに従います。

上記のアーキテクチャは、オブジェクトデータが3つのフェーズでリレーショナルデータベースに格納される方法を説明しています。

フェーズ1

と名付けられた最初のフェーズ Object dataフェーズには、POJOクラス、サービスインターフェイス、およびクラスが含まれます。これは、ビジネスロジックの操作と属性を持つ主要なビジネスコンポーネントレイヤーです。

たとえば、従業員データベースをスキーマとして考えてみましょう-

  • 従業員のPOJOクラスには、ID、名前、給与、指定などの属性が含まれています。そして、それらの属性のsetterメソッドやgetterメソッドのようなメソッド。

  • 従業員DAO /サービスクラスには、従業員の作成、従業員の検索、従業員の削除などのサービスメソッドが含まれています。

フェーズ2

と名付けられた第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

3番目のフェーズはリレーショナルデータフェーズです。これには、ビジネスコンポーネントに論理的に接続されているリレーショナルデータが含まれています。上で説明したように、ビジネスコンポーネントがデータをコミットする場合にのみ、データはデータベースに物理的に保存されます。それまでは、変更されたデータはグリッド形式でキャッシュメモリに保存されます。データを取得するプロセスも同じです。

上記の3つのフェーズのプログラムによる相互作用のメカニズムは、オブジェクトリレーショナルマッピングと呼ばれます。

Mapping.xml

Mapping.xmlファイルは、エンティティクラスをデータベーステーブルにマッピングするようにJPAベンダーに指示するためのものです。

4つの属性を含むEmployeeエンティティの例を見てみましょう。名前が付けられたEmployeeエンティティのPOJOクラス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;
   }
}

上記のコードは、EmployeeエンティティのPOJOクラスです。これには、eid、ename、salary、およびdegの4つの属性が含まれています。これらの属性はデータベースのテーブルフィールドであり、eidはこのテーブルの主キーであると考えてください。次に、そのためのHibernateマッピングファイルを設計する必要があります。名前の付いたマッピングファイル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>:タグは、データベース内のテーブルに変換するエンティティクラスを定義します。属性クラスは、POJOエンティティクラス名を定義します。

  • <table>:タグはテーブル名を定義します。クラス名をテーブル名として保持する場合、このタグは必要ありません。

  • <attributes> :タグは属性(テーブル内のフィールド)を定義します。

  • <id>:tagは、テーブルの主キーを定義します。ザ・<generated-value> タグは、自動、手動、またはシーケンスから取得した主キー値を割り当てる方法を定義します。

  • <basic> :タグは、テーブルの残りの属性を定義するために使用されます。

  • <column-name> :タグは、ユーザー定義のテーブルフィールド名を定義するために使用されます。

注釈

通常、Xmlファイルは、特定のコンポーネントを構成したり、コンポーネントの2つの異なる仕様をマッピングしたりするために使用されます。私たちの場合、フレームワークでxmlを個別に維持する必要があります。つまり、マッピングxmlファイルを作成するときに、POJOクラスの属性をmapping.xmlファイルのエンティティタグと比較する必要があります。

解決策は次のとおりです。クラス定義では、アノテーションを使用して構成部分を記述できます。アノテーションは、クラス、プロパティ、およびメソッドに使用されます。注釈は「@」記号で始まります。アノテーションは、クラス、プロパティ、またはメソッドが宣言される前に宣言されます。JPAのすべてのアノテーションは、javax.persistenceパッケージで定義されています。

以下に、例で使用されているアノテーションのリストを示します。

注釈 説明
@エンティティ このアノテーションは、クラスをエンティティまたはテーブルとして宣言することを指定します。
@テーブル このアノテーションは、テーブル名を宣言することを指定します。
@Basic この注釈は、非制約フィールドを明示的に指定します。
@埋め込み このアノテーションは、埋め込み可能なクラスの値インスタンスを持つクラスまたはエンティティのプロパティを指定します。
@Id この注釈は、クラスのID(テーブルの主キー)に使用するプロパティを指定します。
@GeneratedValue この注釈は、自動、手動、シーケンステーブルから取得した値などのID属性を初期化する方法を指定します。
@トランジェント この注釈は、永続的ではない、つまり値がデータベースに保存されないプロパティを指定します。
@カラム このアノテーションは、永続性プロパティの列または属性を指定するために使用されます。
@SequenceGenerator このアノテーションは、@ GeneratedValueアノテーションで指定されたプロパティの値を定義するために使用されます。シーケンスを作成します。
@TableGenerator このアノテーションは、@ GeneratedValueアノテーションで指定されたプロパティの値ジェネレーターを指定するために使用されます。値を生成するためのテーブルを作成します。
@AccessType このタイプの注釈は、アクセスタイプを設定するために使用されます。@AccessType(FIELD)を設定すると、フィールドごとのアクセスが発生します。@AccessType(PROPERTY)を設定すると、プロパティごとの評価が行われます。
@JoinColumn この注釈は、エンティティの関連付けまたはエンティティのコレクションを指定するために使用されます。これは、多対1および1対多の関連付けで使用されます。
@UniqueConstraint この注釈は、フィールド、プライマリテーブルまたはセカンダリテーブルの一意の制約を指定するために使用されます。
@ColumnResult このアノテーションは、select句を使用してSQLクエリの列の名前を参照します。
@ManyToMany この注釈は、結合テーブル間の多対多の関係を定義するために使用されます。
@ManyToOne この注釈は、結合テーブル間の多対1の関係を定義するために使用されます。
@OneToMany この注釈は、結合テーブル間の1対多の関係を定義するために使用されます。
@OneToOne この注釈は、結合テーブル間の1対1の関係を定義するために使用されます。
@NamedQueries このアノテーションは、名前付きクエリのリストを指定するために使用されます。
@NamedQuery このアノテーションは、静的な名前を使用してクエリを指定するために使用されます。

JavaBean標準

Javaクラスは、インスタンスの値と動作を単一のユニット呼び出しオブジェクトにカプセル化します。Java Beanは、一時ストレージであり、再利用可能なコンポーネントまたはオブジェクトです。これは、インスタンス属性を個別に初期化するためのデフォルトのコンストラクターメソッドとgetter&setterメソッドを持つシリアル化可能なクラスです。

Beanの規則

  • Beanには、デフォルトのコンストラクターまたはシリアル化されたインスタンスを含むファイルが含まれています。したがって、BeanはBeanをインスタンス化できます。

  • Beanのプロパティは、ブールプロパティと非ブールプロパティに分けることができます。

  • 非ブールプロパティには getter そして setter メソッド。

  • ブールプロパティに含まれる setter そして is 方法。

  • Getterプロパティのメソッドは、小文字の「get」(Javaメソッドの規則)で始まり、大文字で始まるフィールド名で続ける必要があります。たとえば、フィールド名は「salary」であるため、このフィールドのgetterメソッドは「getSalary()」です。

  • Setterプロパティのメソッドは、小文字の「set」(Javaメソッド規則)で始まり、大文字で始まるフィールド名と、フィールドに設定する引数値で始まる必要があります。たとえば、フィールド名は「salary」であるため、このフィールドのsetterメソッドは「setSalary(doublesal)」です。

  • ブール型プロパティの場合、それがtrueかfalseかをチェックするメソッドです。たとえば、ブールプロパティ「empty」の場合、このフィールドのisメソッドは「isEmpty()」です。