インプリメンテーション・クラス内で直接ハンドラー・クラスを変更することは可能ですが、ハンドラー・クラス自体を編集した方が都合のよい場合もあります。
「インターフェース用のハンドラー・クラスの作成」ウィザードを使用すると、ワークベンチによりハンドラー・クラスが生成されたインプリメンテーション・クラスから、ハンドラー・クラスを分離することができます。 ワークベンチはそれらのハンドラー・クラスを新規ファイルに作成します。 また、ワークベンチは @Handler アノテーションをインターフェースに追加します。
ハンドラー・クラスをインプリメンテーション・クラスから作成した後に、それを別個のファイルに配置するには、以下のようにします。
@Select(sql = "SELECT PRODUCT_NUMBER, BASE_PRODUCT_NUMBER, INTRODUCTION_DATE,"
+ " DISCONTINUED_DATE, PRODUCT_TYPE_CODE, PRODUCT_COLOR_CODE, PRODUCT_SIZE_CODE,"
+ " PRODUCT_BRAND_CODE, PRODUCTION_COST, GROSS_MARGIN, PRODUCT_IMAGE"
+ " FROM GOSALES.PRODUCT")
Iterator<Product> getProducts();
インターフェースのインプリメンテーション・クラスには、@generated タグおよびこのメソッドの以下のハンドラー・クラスが入っています。
public static class GetProductsRowHandler extends BaseRowHandler<Product>
{
public Product handle (java.sql.ResultSet rs, Product returnObject) throws java.sql.SQLException
{
returnObject = new Product ();
returnObject.setProduct_number(getInt (rs, 1));
returnObject.setBase_product_number(getInt (rs, 2));
returnObject.setIntroduction_date(getTimestamp (rs, 3));
returnObject.setDiscontinued_date(getTimestamp (rs, 4));
returnObject.setProduct_type_code(getInt (rs, 5));
returnObject.setProduct_color_code(getInt (rs, 6));
returnObject.setProduct_size_code(getInt (rs, 7));
returnObject.setProduct_brand_code(getInt (rs, 8));
returnObject.setProduction_cost(getBigDecimal (rs, 9));
returnObject.setGross_margin(getDouble (rs, 10));
returnObject.setProduct_image(getString (rs, 11));
return returnObject;
}
}
「インターフェース用のハンドラー・クラスの作成」ウィザードを使用した後、ワークベンチは、ハンドラー・クラスが入るファイル GetProductsRowHandler.java を作成します。 ワークベンチは、ハンドラー・クラスのないインプリメンテーション・クラスも再生成します。 ハンドラー・クラスは直接編集することができ、編集のためにインプリメンテーション・クラスを開く必要はありません。
インターフェースのメソッドには @Handler アノテーションが入っています。
@Handler(rowHandler=aforementioned.GetProductsRowHandler.class)
@Select(sql = "SELECT PRODUCT_NUMBER, BASE_PRODUCT_NUMBER, INTRODUCTION_DATE,"
+ " DISCONTINUED_DATE, PRODUCT_TYPE_CODE, PRODUCT_COLOR_CODE, PRODUCT_SIZE_CODE,"
+ " PRODUCT_BRAND_CODE, PRODUCTION_COST, GROSS_MARGIN, PRODUCT_IMAGE"
+ " FROM GOSALES.PRODUCT")
Iterator<Product> getProducts();