5.2.1 JPAを使用したアプリケーションの利点
JPAを利用したアプリケーションを使用すると,次に示すことが実現できます。
-
O/Rマッピングやデータベースアクセス処理の隠蔽によって,ユーザプログラミングが容易になります。
-
アノテーションを利用することで,定義ファイル作成コストを削減し,POJO(Plain Old Java Object)によるコーディングが実現します。
-
デフォルト値の設定によって,ユーザのコーディング量が削減できます。
ここでは,JPAを使用しない場合とJPAを使用する場合のデータアクセスモデルを比較して,JPAを使用したアプリケーションの利点を説明します。
(1) JPAを使用しない場合のデータアクセスモデル
JPAを使用しない場合,J2EEアプリケーションからデータベースにアクセスするには,一般的に,次の図に示すようなデータアクセスモデルを使用してアプリケーションを作成します。
上記の図について説明します。
図の場合のデータアクセスモデルでは,SQLをビジネスロジックから隠蔽するために,テーブルに対応するDAOと呼ばれるクラスを作成します。DAOクラスの中に,JDBCインタフェースでSQLを発行する処理を作成します。図の流れについて説明します。
-
ビジネスロジックを記述してあるEJBでは,DAOを使用してデータベースからデータを読み出します。
-
取得したデータをDTOと呼ばれるオブジェクトに格納します。
-
DTOオブジェクトをWebコンポーネントに返します。Webコンポーネントではデータベースから取得したデータをWebページに出力します。
このようなデータアクセスモデルでは,データベースのデータモデルが大きく複雑になると,作成しなければならないDAO,SQL,DTOクラスの量も多くなります。DAO,SQL,およびDTOの作成は単調な手作業のため,アプリケーション開発の生産性を低下させる原因となります。
(2) JPAを使用した場合のデータアクセスモデル
JPAを使用した場合のデータアクセスモデルは次に示す図のようになります。
JPAを使用した場合,データベースのテーブルの行に対応したクラスを作成します。これを,エンティティクラスといいます。ビジネスロジックを記述してあるEJBでは,このエンティティクラスのオブジェクトを直接データベースに格納するかのように,処理を記述できます。
図について説明します。
-
JPAプロバイダと呼ばれるJPAのエンジンがデータベースに対してSQLを発行します。また,JPAプロバイダがエンティティオブジェクトとデータベースのテーブルの状態を自動的に同期を取ります。
-
エンティティオブジェクトは,取得したデータをそのままWebコンポーネントに渡すことができます。
このように,JPAを使用するとDTOを作成する必要はありません。また,エンティティクラスは,Eclipseなどの開発ツールを使用してデータベースのテーブルスキーマから自動的に生成することもできます。従来のデータアクセスモデルで生産性を低下させる原因となっていたDAO,SQL,DTOを作成する必要がないため,従来よりもアプリケーションの生産性を向上させることができます。
なお,エンティティクラスおよびJPAプロバイダについては,「5.2.2 エンティティクラスとは」および「5.2.3 JPAプロバイダとは」を参照してください。