pureQuery Generator ユーティリティーと共に XML 構成ファイルを使用する

アノテーション付きメソッドを定義するインターフェースのインプリメンテーション・クラスを生成する場合は、それらのメソッドが使用する SQL ステートメントを指定またはオーバーライドする XML ファイルを使用できます。 さらに、同じ XML ファイルを使用して、表やビューなどのデータベース・オブジェクト内の列が、Bean のプロパティーにマップする方法をオーバーライドすることもできます。

pureQuery ジェネレーターは、インターフェースでアノテーション付きメソッドのインプリメンテーションを作成するときに、XML 構成ファイルを検査して、使用する SQL ステートメント (メソッドが空のアノテーションで定義されている場合)、またはメソッドのアノテーションで使用される SQL ステートメントのオーバーライドを探します。 さらに pureQuery ジェネレーターは XML 構成ファイルを検査して、ファイルが参照する可能性があるすべての Bean も探します。

XML 構成ファイルを指定するには、pureQuery ジェネレーターを呼び出すときに xmlFile オプションを使用します。

アノテーション付きメソッドを定義するインターフェースで SQL ステートメントを指定またはオーバーライドするための XML 構成ファイルの使用例

以下の例は、XML 構成ファイルを使用することが必要になる状況を示しています。

以下のような状況では、インターフェースで SQL ステートメントをオーバーライドすることが必要になることがあります。
  • 2 つの異なるデータベースに対して実行している 2 つの異なるアプリケーションでインターフェースを使用する場合。 インターフェースに SQL ステートメントを組み込む代わりに、各アプリケーションに対して XML 構成ファイルを作成し、各 XML ファイル内で各アプリケーションに対する SQL ステートメントを作成することができます。

    例えば、インターフェース内でアノテーション付きメソッドを以下のように定義することができます。

    @Select
    Iterator<Customer> getCustomersInRegion(int r);

    1 つのアプリケーション用の XML 構成ファイル内で、このメソッドに使用する SQL ステートメントを以下のように定義します。

    <named-native-query name="myPackage.CustomerInterface#getCustomersInRegion(int)"> 
      <query>
        <![CDATA[SELECT CUSTID, NAME FROM Customer WHERE STOREREGION=?1]]>
      </query> 
    </named-native-query>

    もう一方のアプリケーションに対する XML 構成ファイル内で、同じく以下のようにします。

    <named-native-query name="myPackage.CustomerInterface#getCustomersInRegion(int)"> 
      <query>
        <![CDATA[SELECT ID, NAME FROM CUST WHERE REGION=?1]]>
      </query> 
    </named-native-query>
  • インターフェースに SQL ステートメントを追加し、それらのステートメントが 1 つのアプリケーションをサポートする場合。 そのインターフェースを、別のデータベースに対して実行している 2 番目のアプリケーションで使用します。 2 番目のアプリケーションのインプリメンテーション・クラスを生成する際に、XML ファイルを使用して、インターフェースに存在する SQL ステートメントをオーバーライドすることができます。

    例えば、インターフェースには、1 番目のアプリケーションが使用するアノテーション付きメソッドの以下のような定義を含めることができます。

    @Select(sql="SELECT CUSTID, NAME FROM Customer WHERE STOREREGION=?1")
    Iterator<Customer> getCustomersInRegion(int r);

    もう一方のアプリケーションに対する XML 構成ファイル内で、SQL を以下のようにオーバーライドできます。

    <named-native-query name="myPackage.CustomerInterface#getCustomersInRegion(int)"> 
      <query>
        <![CDATA[SELECT ID, NAME FROM CUST WHERE REGION=?1]]>
      </query> 
    </named-native-query>

フィードバック