Obwohl Sie die Handlerklasse direkt in der Implementierungsklasse modifizieren können, ist es in einigen Situationen einfacher, die Handlerklasse selbst zu bearbeiten.
Sie können mithilfe des Assistenten Handlerklassen für Schnittstelle erstellen Handlerklassen von den Implementierungsklassen trennen, in denen die Workbench diese Handlerklassen generiert. Die Workbench erstellt diese Handlerklassen in neuen Dateien. Die Workbench fügt der Schnittstelle auch @Handler-Annotationen hinzu.
Gehen Sie wie folgt vor, um eine Handlerklasse aus einer Implementierungsklasse zu erstellen und in eine separate Datei zu stellen:
@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();
Die Implementierungsklasse für die Schnittstelle enthält das Tag @generated und die folgende Handlerklasse für diese Methode:
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; } }
Nachdem Sie den Assistenten Handlerklassen für Schnittstelle erstellen verwendet haben, erstellt die Workbench die Datei 'GetProductsRowHandler.java', die die Handlerklasse enthalten soll. Die Workbench generiert auch die Implementierungsklasse ohne die Handlerklasse neu. Sie können die Handlerklasse direkt bearbeiten, ohne dass die Implementierungsklasse für die Bearbeitung geöffnet werden muss.
In der Schnittstelle weist die Methode nun die Annotation @Handler auf.
@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();