구현 클래스에서 핸들러 클래스를 작성하여 개별 파일에 놓기

워크벤치가 어노테이션이 있는 메소드 인터페이스에 대해 생성하는 구현 클래스에서 작성하는 핸들러 클래스를 개별적으로 사용자 정의할 수 있습니다.

이 태스크 정보

예를 들어, 어노테이션이 있는 메소드가 쿼리에 대해 리턴하는 결과를 pureQuery가 처리하는 방법을 사용자 정의하려고 합니다. 사용자 고유의 RowHandler를 맨 처음부터 작성하지 않고 해당 메소드를 선언하는 인터페이스에 대해 워크벤치가 생성한 구현 클래스에 미리 존재하는 RowHandler 클래스를 수정할 수 있습니다.

구현 클래스에서 직접 핸들러 클래스를 수정할 수 있지만, 일부 상황에서는 자동으로 핸들러 클래스를 편집하는 것이 더 편리합니다.

인터페이스에 대한 핸들러 클래스 작성 마법사를 사용하여. 워크벤치가 핸들러 클래스를 생성한 구현 클래스에서 핸들러 클래스를 분리할 수 있습니다. 워크벤치는 새 파일에서 해당되는 핸들러 클래스를 작성합니다. 워크벤치는 또한 @Handler 어노테이션을 인터페이스에 추가합니다.

프로시저

구현 클래스에서 핸들러 클래스를 작성하여 개별 파일에 놓으려면 다음을 수행하십시오.

  1. 패키지 탐색기에서 인터페이스가 정의된 소스 파일을 마우스 오른쪽 단추로 누르고 pureQuery > 핸들러 클래스 작성을 선택하십시오. 인터페이스에 대한 핸들러 클래스 작성이 열립니다.
  2. 마법사에 있는 제어사항을 사용하여 작성하려는 핸들러 클래스와 Java™ 프로젝트에서 이 핸들러 클래스를 놓을 위치를 지정하십시오.
  3. 완료를 누르십시오. 핸들러 클래스가 프로젝트에 나타납니다. 프로젝트의 다음 빌드에서, 구현 클래스에서 @generated 태그를 제거하지 않은 경우 워크벤치는 구현 클래스를 다시 생성하고 핸들러 클래스는 포함하지 않습니다. 이 태그를 제거하면 워크벤치는 구현 클래스를 다시 생성하지 않습니다.

예를 들어, 인터페이스에 다음 어노테이션이 있는 메소드가 포함되어 있다고 가정하겠습니다.
	@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();

피드백