Aunque puede modificar la clase de manejador directamente en la clase de implementación, en algunas situaciones es más conveniente editar sólo la clase de manejador.
Con el asistente para Crear Clases de manejador para interfaz, puede separar las clases de manejador de las clases de implementación en las que el entorno de trabajo las ha generado. El entorno de trabajo crea esas clases de manejador en archivos nuevos. El entorno de trabajo también añade anotaciones @Handler a las interfaces.
Para crear clases de un manejador a partir de una clase de implementación y colocarlas en un archivo separado:
@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 clase de implementación para la interfaz contiene una etiqueta @generated y la siguiente clase de manejador para este método:
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; } }
Después de utilizar el asistente para Crear Clases de manejador para interfaz, el entorno de trabajo crea el archivo GetProductsRowHandler.java para que contenga la clase de manejador. El entorno de trabajo también vuelve a generar la clase de implementación sin la clase de manejador. Puede editar la clase de manejador directamente, sin tener que abrir la clase de implementación para la edición.
En la interfaz, el método contiene ahora una anotación @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();