Handlerklassen aus Implementierungsklassen erstellen und in separate Dateien stellen

Die Workbench generiert Implementierungsklassen für Ihre Schnittstellen inklusive mit Annotationen versehener Methoden. Die Handlerklassen, die die Workbench in diesen Implementierungsklassen erstellt, können Sie separat anpassen.

Informationen zu diesem Vorgang

Beispiel: Sie wollen die Art und Weise anpassen, in der pureQuery die Ergebnisse verarbeitet, die eine mit Annotationen versehene Methode für eine Abfrage zurückgibt. Anstatt eine eigene RowHandler-Klasse ganz neu zu erstellen, können Sie eine RowHandler-Klasse modifizieren, die in der Implementierungsklasse bereits vorhanden ist, die die Workbench für die Schnittstelle erstellt hat, die diese Methode deklariert.

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.

Vorgehensweise

Gehen Sie wie folgt vor, um eine Handlerklasse aus einer Implementierungsklasse zu erstellen und in eine separate Datei zu stellen:

  1. Klicken Sie im Paketexplorer mit der rechten Maustaste auf die Quellendatei, in der die Schnittstelle definiert ist, und wählen Sie Datenzugriffsentwicklung > Handlerklassen erstellen aus. Der Assistent Handlerklassen für Schnittstellen erstellen wird geöffnet.
  2. Mit den Steuerelementen im Assistenten können Sie die Handlerklassen angeben, die Sie erstellen wollen, und Sie können angeben, wo Sie sie in Ihrem Java-Projekt platzieren wollen.
  3. Klicken Sie auf Fertig stellen. Die Handlerklassen werden in Ihrem Projekt angezeigt. Beim nächsten Build des Projekts generiert die Workbench die Implementierungsklasse neu und schließt die Handlerklasse nicht mit ein, es sei denn, Sie haben den Tag @generated aus der Implementierungsklasse entfernt. Das Entfernen dieses Tags führt dazu, dass die Workbench die Implementierungsklasse nicht erneut erstellt.

Beispiel

Beispiel: Eine Schnittstelle enthält die folgende mit Annotationen versehene Methode:
	@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();

Feedback