lesson 07 - providing for efficient queries rev

Upload: diego

Post on 30-May-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    1/30

    ?Copyright 2004, Oracle. Todos los derechos reservados.

    7Suministro de Consultas Eficaces

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    2/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Objetivos

    Al finalizar esta leccin, debera estar capacitado para:

    Crear objetos de vista en modo experto

    Utilizar consultas parametrizadas en objetos de vista

    Implementar mtodos personalizados Crear un programa Java para probar mtodos

    personalizados

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    3/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Customers

    IDName

    Status

    Email

    Orders

    Id

    CustomerId

    OrderMode

    OrderTotal

    Visin General

    Objeto de vista

    select c.name,

    o.order_total fromcustomers c,orders o wherec.id=o.customer_id

    CustomerOrders

    getFullName()

    Mtodo personalizado

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    4/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Objetos de Vista de Modo Experto

    Utilice las consultas de modo experto para crear objetos

    de vista personalizados. Seleccione el modo experto en

    el asistente Create View Object o en la categora Query

    del editor View Object.

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    5/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    En el modo normal, JDeveloper mantiene asociacionesentre los atributos de entidad y las columnas de la base

    de datos.

    La edicin de una consulta en el modo experto puede

    invalidar estas asignaciones.Por ejemplo, edite la consulta CustomersView:

    Durante el tiempo de ejecucin, el valor del atributoStatus no se corresponde con el valor de la tabla

    subyacente.

    Si se realiza una actualizacin con la vista se produce

    un error de bloqueo.

    SELECT ID, NAME, initcap(STATUS) AS StatusFROM CUSTOMERS

    Asignacin de Atributos en el Modo Experto

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    6/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Mantenimiento de Asignaciones de Atributos

    en Modo Experto

    El usuario es responsable de mantener la asignacin

    correcta entre los atributos de entidad y las columnas

    de la base de datos.

    Para el ejemplo de estado del cliente: Suprima el atributo Status del objeto de vista.

    Cree un nuevo atributo calculado denominado Status.

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    7/30Copyright 2004, Oracle. Todos los derechos reservados.

    Objetos de Vista Basados en SQL

    Un objeto de vista basado en SQL:

    No se basa en ningn objeto de entidad

    No se puede utilizar para insertar, actualizar o suprimir

    Utilice objetos de vista basados en SQL para vistas de

    slo consulta, que no necesitan la funcionalidad deobjetos de entidad.

    Los objetos de vista basados en SQL proporcionan un

    mejor rendimiento que los objetos de vista basados en

    entidad.

    SELECT... OV

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    8/30Copyright 2004, Oracle. Todos los derechos reservados.

    Creacin de un Objeto de Vista Basado en SQL

    Cree un objeto de vista sin seleccionar un objeto de

    entidad en el asistente View Object.

    Haga clic en el separador Query del asistente e

    introduzca la consulta en el campo proporcionado.

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    9/30Copyright 2004, Oracle. Todos los derechos reservados.

    Implementacin de Mtodos Personalizados

    Para agregar mtodos personalizados a un objeto de

    vista, modifique el archivoViewObjectRowImpl.java:

    public String getCustFullName()

    {

    String custFullName = "";

    custFullName = getCustFirstName() +

    " " + getCustLastName();

    return custFullName;}

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    10/30Copyright 2004, Oracle. Todos los derechos reservados.

    Visualizacin de Mtodos en la Aplicacin Cliente

    Muestre los mtodos de fila de cliente de objeto de vista:

    getCustFirstName(), getCustLastName()

    getCustFullName()

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    11/30Copyright 2004, Oracle. Todos los derechos reservados.

    Creacin de un Cliente de Prueba

    Para crear un cliente de prueba:

    1. Instancie el mdulo de aplicacin.

    2. Instancie el objeto de vista.

    3. Busque y manipule los datos segn sea necesario.4. Llame a los mtodos personalizados segn sea

    necesario.

    5. Cierre el mdulo de aplicacin.

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    12/30Copyright 2004, Oracle. Todos los derechos reservados.

    Instanciacin de un Mdulo de Aplicacin

    Instancie el mdulo de aplicacin mediante la clase

    Configuration.

    Utilice el nombre completo cualificado de la aplicacin

    y el nombre de la configuracin como argumentos.

    // App module nameString _am = "model.OEModule";

    // Configuration nameString _cf = "OEModuleLocal";

    // Create an instance of the AppModule

    ApplicationModule am =Configuration.createRootApplicationModule(_am,_cf);

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    13/30Copyright 2004, Oracle. Todos los derechos reservados.

    Instanciacin de un Objeto de Vista y

    Datos de Salida

    Utilice findViewObject() para instanciar el objeto devista.

    Itere a travs de Rowset.

    Muestre los datos con getAttribute().ViewObject vo = am.findViewObject("CustomersView");

    while (vo.hasNext()) {

    CustomersViewRow row = (CustomersViewRow) vo.next();

    System.out.println("Customer First Name is " +

    row.getAttribute("CustLastName));

    }

    Configuration.releaseRootApplicationModule(am,true);

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    14/30Copyright 2004, Oracle. Todos los derechos reservados.

    Llamada a Mtodos Personalizados

    1. Recupere la fila de objeto de vista.

    2. Llame a los mtodos publicados en el objeto de vista.

    System.out.println("Customer First Name: " +row_Cust.getCustFirstName());

    System.out.println("Customer Last Name: " +row_Cust.getCustLastName());

    System.out.println("Customer Full Name: " +row_Cust.getCustFullName());

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    15/30Copyright 2004, Oracle. Todos los derechos reservados.

    Definicin de Parmetros para la ClusulaWhere

    La clusula where de una consulta de objeto de vista puedecontener variables o parmetros.

    Proporciona flexibilidad durante el tiempo de ejecucin

    Puede ser de estilo JDBCcustomer_id = ?

    Puede ser de estilo Oracle

    customer_id = :1

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    16/30Copyright 2004, Oracle. Todos los derechos reservados.

    Durante el tiempo de ejecucin, se pueden asignar

    valores a los parmetros.

    Definicin de Parmetros para la ClusulaWhere

    Parmetros

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    17/30Copyright 2004, Oracle. Todos los derechos reservados.

    Asignacin de Valores a Consultas con

    Parmetros durante el Tiempo de Ejecucin

    1. Asigne parmetros en el cliente.

    2. Una vez asignados, vuelva a ejecutar la consulta.

    ViewObject vo = am.findViewObject("CustParamView");vo.setWhereClauseParam(0, "S");vo.setWhereClauseParam(1,

    new oracle.jbo.domain.Number(10));

    vo.executeQuery();

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    18/30Copyright 2004, Oracle. Todos los derechos reservados.

    Creacin de un Cliente de Prueba: Cdigo

    de Ejemplo

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    19/30Copyright 2004, Oracle. Todos los derechos reservados.

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    20/30Copyright 2004, Oracle. Todos los derechos reservados.

    Creacin de un Objeto de Vista durante el

    Tiempo de Ejecucin

    //am is an ApplicationModuleString entity = "orders.LineItem";String selectClause = "id, status, quantity";

    String fromClause = "line_item";String whereClause = "status = 'S'";

    ViewObject shippedItemsVo =am.createViewObjectFromQueryClauses(null, entity,selectClause, fromClause, whereClause, null);

    ViewObject queryItemsVo =am.createViewObjectFromQueryStmt("",

    "select id, status, quantity from line_item");

    Para crear un nuevo objeto de vista basado en unaentidad:

    Para crear un nuevo objeto de vista basado en unaconsulta:

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    21/30Copyright 2004, Oracle. Todos los derechos reservados.

    //am is an ApplicationModuleString entity = "orders.LineItem";String selectClause = "id, status, quantity";

    String fromClause = "line_item";String whereClause = "status = 'S'";

    ViewObject shippedItemsVo =am.createViewObjectFromQueryClauses(null, entity,selectClause, fromClause, whereClause, null);

    ViewObject queryItemsVo =am.createViewObjectFromQueryStmt("",

    "select id, status, quantity from line_item");

    Creacin de un Objeto de Vista durante el

    Tiempo de Ejecucin

    Para crear un nuevo objeto de vista basado en unaentidad:

    Para crear un nuevo objeto de vista basado en unaconsulta:

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    22/30Copyright 2004, Oracle. Todos los derechos reservados.

    Compruebe el argumento de lnea de comandos.

    Cree un objeto oracle.jbo.Key.

    Llame a findByKey(), que devuelve una matriz de

    objetos de fila.

    Bsqueda de Datos por Clave de Fila

    if (args.length==0) {system.out.println("Customer ID is required");System.exit(0);

    }

    Key custKey = new Key(new Object[] {args[0]});

    Row[] customers = vo.findByKey(custKey,1);

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    23/30Copyright 2004, Oracle. Todos los derechos reservados.

    Resumen

    En esta leccin ha aprendido a:

    Crear objetos de vista de modo experto y de

    programacin

    Personalizar ADF Business Components para queincluya mtodos personalizados

    Utilizar consultas parametrizadas en objetos de vista

    Probar los mtodos personalizados utilizando un

    cliente Java de lnea de comandos

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    24/30Copyright 2004, Oracle. Todos los derechos reservados.

    Prctica 7-1: Visin General

    Esta prctica cubre los siguientes temas:

    Creacin de un objeto de vista de programacin

    Creacin de consultas parametrizadas

    Creacin de mtodos personalizados para un objeto devista

    Prueba de mtodos personalizados y suministro de

    parmetros de consulta mediante un cliente Java de

    lnea de comandos

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    25/30Copyright 2004, Oracle. Todos los derechos reservados.

    Prctica 7-1

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    26/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Prctica 7-1

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    27/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Prctica 7-1

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    28/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Prctica 7-1

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    29/30

    Copyright 2004, Oracle. Todos los derechos reservados.

    Prctica 7-1

  • 8/14/2019 Lesson 07 - Providing for Efficient Queries Rev

    30/30

    Prctica 7-1