インプリメンテーション・クラス内で直接ハンドラー・クラスを変更することは可能ですが、ハンドラー・クラス自体を編集した方が都合のよい場合もあります。
「インターフェース用のハンドラー・クラスの作成」ウィザードを使用すると、ワークベンチによりハンドラー・クラスが生成されたインプリメンテーション・クラスから、ハンドラー・クラスを分離することができます。 ワークベンチはそれらのハンドラー・クラスを新規ファイルに作成します。 また、ワークベンチは @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();