アノテーション付きメソッドを使用することの利点は以下のとおりです。
データ・アクセス・オブジェクトを作成するインターフェースを記述することによって、データ・アクセス・オブジェクト (DAO) パターンに準拠したカスタム・インターフェースを作成することができます。 インターフェースの作成が完了したら、pureQuery Generator ユーティリティーを実行して、インターフェースを実装するクラスの定義を生成できます。 アプリケーション用にコードを書く際には、このインプリメンテーション・クラスのインスタンスを作成してから、そのインスタンス内に実装されているメソッドを呼び出すことができます。 パラメーターをメソッドに提供して照会の結果を受け取るために、Java オブジェクト、Bean、およびコレクションを使用できます。
例えば、以下のメソッドは @Select アノテーションを使用し、CustomerQuery というインターフェース内に出現することができます。このインターフェースでは、CUSTOMER という表のレコードの照会または更新を行うためのメソッドを定義します。
@Select(sql="SELECT CUSTID, NAME FROM CUSTOMER WHERE REGION = ?1") List<Customer> getCustomersInRegion(int r);
このインターフェースをコンパイルし、pureQuery Generator ユーティリティーを使用して、このインターフェースを実装する CustomerQueryImpl というクラスを作成すると、アプリケーションではこのメソッドを呼び出して、返された List から照会結果を取得できます。
Connection con = DriverManager.getConnection(...); CustomerQuery cQuery = DataFactory.getData(CustomerQuery.class, con); int region = 123; List<Customer> customersInRegion = cQuery.getCustomersInRegion(region);
このコードは、以下のステップを実行します。
このコードは、インプリメンテーション・クラスではなく CustomerQuery インターフェースを直接参照することに注意してください。 インプリメンテーション・クラスに対する従属関係が生成されることなく、アプリケーションをコンパイルすることができます。
XML ファイルを使用して、インターフェースで定義されるメソッドのアノテーション内の SQL ステートメントをオーバーライドすることができます。インターフェースのインプリメンテーション・クラスを生成する際に、SQL ステートメントを XML ファイルに提供し、そのファイルを pureQuery Generator ユーティリティーに提供します。このようにして、複数のアプリケーションが別のデータベースと関連付けられている場合、それらのアプリケーションでインターフェースを再利用することができます。
例えば、DB2 データベースで機能する 1 つのアプリケーションと、Oracle データベースで機能する同様のアプリケーションを所有することができます。Customer というインターフェースには、DB2 データベースと互換性のある SQL ステートメントを含めることができます。このインターフェースを 2 番目のアプリケーションで再利用するためには、Customer インターフェースのインプリメンテーション・クラスの生成時に、Oracle データベースと互換性のある SQL ステートメントが含まれた XML ファイルを pureQuery Generator ユーティリティーに提供します。