Esquema de Mapeo de Base de Datos Relacionales a Objetos
Luis Jos Muiz Rascado
Programa de Genmica Computacional Centro de Ciencias Genmicas UNAM
ljmuniz@[Link]
Contenido
Introduccin Cmo funciona JDBC
Propuestas de Solucin Qu es el Mapeo Objeto-Relacional?
Qu es iBATIS?
Caractersticas de iBATIS Pros y Contras Cmo funciona iBATIS Arquitectura de iBATIS Extraer e Insertar Datos Borrar y Actualizar Caso de xito RegulonDB
2
Introduccin
Cmo funciona JDBC
Solicitud SQL
Comunicacin Viva con la Base de Datos mientra sacamos los datos
Manipulacin del SQL hay que concatenar cada lnea
Propuestas de Solucin
1. Hibernate
[Link]
2. Java Persistence API
[Link]
3. iBATIS
[Link]
Qu es el Mapeo Objeto-Relacional?
Solicitud de SQL
SQL
Qu es iBATIS?
iBATIS es un framework mapeador de datos que se encuentran contenidos en base de datos y obtener objetos a partir de los datos relacionales.
Fue desarrollado por Clinton Begin y el cdigo fuente es administrado por la Apache Software Fundation ([Link]
Caractersticas de iBATIS
1. Mapeo basado en SQL. 2. Trabaja con esquemas de base de datos sencillos y complejos . 3. Construccin de SQL dinmico o al vuelo apartar de etiquetas de XML. 4. Soporte de transacciones. 5. Minima dependencia de libreras de terceros y bajo consumo de recursos. 6. Intregacin con otros frameworks (Spring).
10
Pros y Contras
Pros
1. Se puede utilizar cualquier tipo de sentencia SQL: UNION, OUTER JOIN. 2. Independencia de la base de datos. 3. Reusabilidad de sentencias SQL y objetos de resultados. 4. Mayor flexibilidad en la manipulacin de SQL.
Contras
1. Tiempo en modelado de los objetos que contendrn los resultados de SQL. 2. Tiempo en configurar el ambiente para usar iBATIS.
11
Cmo funciona iBATIS
Solicitud de ID de SQL
Solicitud SQL
12
Arquitectura de iBATIS
[Link] [Link] [Link]
[Link]
[Link]
[Link] [Link]
13
Esquema de Base de Datos (tienda)
14
[Link]
<sqlMapConfig> <transactionManager type="JDBC> <dataSource type="SIMPLE"> <property name="[Link]" value="[Link]"/> <property name="[Link]" value="jdbc:derby:/Users/luisjose/tienda"/> <property name="[Link]" value=usuario"/> <property name="[Link]" value=usuario"/> </dataSource> </transactionManager> <!-- SqlMaps --> <sqlMap resource=[Link]" /> </sqlMapConfig>
15
[Link]
<sqlMap namespace="SqlMap"> <! SQL que busca los datos de un cliente --> <select id="busca_cliente_nombre" resultClass="[Link]"> SELECT DISTINCT id_cliente AS id, nombre_cliente AS cliente, direccion_cliente AS direccion FROM nombre_cliente = #nombreCliente# </select> </sqlMap>
16
[Link] y SQL
<sqlMap namespace="SqlMap"> <! SQL que busca los datos de un cliente --> <select id="busca_cliente_nombre" resultClass="[Link]"> SELECT DISTINCT id_cliente AS id, nombre_cliente AS cliente, direccion_cliente AS direccion FROM nombre_cliente = #nombreCliente# </select> </sqlMap>
17
[Link]
private static SqlMapClient sqlMap; static { try { String resource = "ibatis/[Link]"; Reader reader = [Link](resource); sqlMap = [Link](reader); } catch(Exception e) { [Link](); } }
public static SqlMapClient getSqlMapInstance() { return sqlMap; }
18
Como Queda Organizado
19
Extraer Datos 1. Instanciamos la clase Ibatis que generamos.
// conexin de iBATIS SqlMapClient sqlMap = [Link]();
2. Se solicita que ejecute un identificador de un query , pero
20
Resultado de SQL
Cliente cliente = [Link]("busca_cliente_nombre", luis);
Resultado de SQL
List clienteList = [Link]("busca_cliente_nombre", luis);
22
if(!([Link]())) { for(int x = 0; x < [Link](); x++ ) { Cliente cliente = (Cliente)[Link](x); [Link]( [Link]() + + [Link]() + + [Link]() ); } // fin for } // fin for
23
Ejemplo Extraccin de datos
24
Insertar Datos
<! SQL que inserta cliente --> <insert id="insera_cliente" > INSERT INTO CLIENTE(id_cliente, nombre_cliente, direccion_cliente) VALUES( #id:Integer#, #cliente:String#, #direccion:String#) </insert>
25
Cliente cliente = new Cliente(); [Link](luis); [Link](direccin conocida); [Link](14); // conexin de iBATIS SqlMapClient sqlMap = [Link](); [Link]("insera_cliente", cliente);
26
Ejemplo de Insercin de Datos
27
Borrar
<! SqlMap --> <! SQL que borra un usuario --> <delete id="borrar_cliente"> DELETE FROM CLIENTE WHERE id_cliente = #id# </delete>
// Java // conexin de iBATIS SqlMapClient sqlMap = [Link](); [Link]("borrar_cliente, 14);
28
Ejemplo de Borrado de Datos
29
Actualizar
<! SqlMap <! SQL que actualiza --> <update id="actualiza_cliente"> UPDATE CLIENTE SET nombre_cliente = #cliente#, direccion_cliente = #direccion# WHERE id_cliente = #id# </update>
// java Cliente cliente = new Cliente();
[Link](luis jos); [Link](av. Central # 1, zacatepec morelos); [Link](14); // conexion a RegulonDB a travez de iBATIS SqlMapClient sqlMap = [Link](); [Link]("actualiza_cliente", cliente);
30
Ejemplo de Actualizacin de Datos
31
Caso de xito:
RegulonDB, es una base de datos sobre el proceso de transcripcin de la bacteria E. coli.
([Link]
[Link] herramientas de RegulonDB estaban muy individualizadas. [Link] un sitio espejo en Purdue University (EcoliHub, http:/[Link]/).
32
Las herramientas de RegulonDB estaban muy individualizadas.
33
34
Colocar un sitio espejo en Purdue University (EcoliHub).
35
36
Gracias
37