Création de classes de gestionnaire à partir des classes d'implémentation et placement dans des fichiers séparés

Vous pouvez personnaliser séparément les classes de gestionnaire créées par le plan de travail dans les classes d'implémentation qu'il génère pour vos interfaces de méthode annotée.

Pourquoi et quand exécuter cette tâche

Par exemple, vous souhaitez personnaliser la façon dont pureQuery traite les résultats renvoyés par une méthode annotée pour une requête. Plutôt que de rédiger votre propre classe RowHandler, vous pouvez modifier une classe RowHandler existante dans la classe d'implémentation générée par le plan de travail pour l'interface déclarant cette méthode.

Même si vous modifiez la classe de gestionnaire directement dans la classe d'implémentation, dans certaines situations, il est préférable de modifier la classe de gestionnaire elle-même.

Dans l'assistant Créer les classes de gestionnaire pour l'interface, vous pouvez séparer les classes de gestionnaire des classes d'implémentation dans lesquelles elles ont été générées par l'assistant. Le plan de travail crée ces classes de gestionnaire dans de nouveaux fichiers. Le plan de travail ajoute également des annotations @Handler aux interfaces.

Procédure

Pour créer une classe de gestionnaire à partir d'une classe d'implémentation et la placer dans un fichier séparé, procédez comme suit :

  1. Dans l'explorateur de packages, cliquez avec le bouton droit sur le fichier source définissant l'interface, puis sélectionnez Développement de l'accès aux données > Créer des classes de gestionnaire. L'assistant Créer des classes de gestionnaire pour l'interface s'ouvre.
  2. Utilisez les commandes de l'assistant pour indiquer les classes de gestionnaire à créer, ainsi que leur emplacement dans votre projet Java.
  3. Cliquez sur Terminer. Les classes de gestionnaire apparaissent dans votre projet. Dans la version suivante du projet, le plan de travail régénère la classe d'implémentation et n'inclut pas les classes de gestionnaire, sauf si vous avez supprimé la balise @generated de la classe d'implémentation. Si vous supprimez cette balise, le plan de travail ne régénère pas la classe d'implémentation.

Exemple

Par exemple, si une interface contient cette méthode annotée :
	@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();

La classe d'implémentation pour l'interface contient une balise @generated ainsi que la classe de gestionaire suivante pour cette méthode :

  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;
     }
   }

Après avoir utilisé l'assistant Créer des classes de gestionnaire pour l'interface, le plan de travail crée le fichier GetProductsRowHandler.java pour y placer la classe de gestionnaire. Le plan de travail régénère également la classe d'implémentation sans la classe de gestionnaire. Vous pouvez modifier la classe de gestionnaire directement, sans devoir ouvrir la classe d'implémentation pour l'éditer.

Dans l'interface, la méthode contient désormais une annotation @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();

Commentaires