Post on 03-Mar-2015
Esquema de Mapeo de Base de Datos Relacionales a Objetos
Luis José Muñiz RascadoPrograma de Genómica ComputacionalCentro de Ciencias Genómicas UNAM
ljmuniz@ccg.unam.mx
1
Contenido
• Introducción– Cómo funciona JDBC – Propuestas de Solución– Qué es el Mapeo Objeto-Relacional?
• Qué es iBATIS?– Características de iBATIS– Pros y Contras– Cómo funciona iBATIS– Arquitectura de iBATIS– Extraer e Insertar Datos– Borrar y Actualizar
• Caso de Éxito– RegulonDB
2
Introducción
3
Cómo funciona JDBC
4
Solicitud SQL
Comunicación Viva conla Base de Datos mientra sacamos los datos
5
Manipulación del SQL hay que concatenar cada línea
6
Propuestas de Solución
1. Hibernatehttp://www.hibernate.org
2. Java Persistence APIhttp://java.sun.com/javaee/technologies/persistence.jsp
3. iBATIShttp://ibatis.apache.org/
7
Qué es el Mapeo Objeto-Relacional?
88
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 código fuente es administrado por la Apache Software Fundation
(http://ibatis.apache.org/).
9
Características de iBATIS
1. Mapeo basado en SQL. 2. Trabaja con esquemas de base de datos
sencillos y complejos .3. Construcción de SQL dinámico o al vuelo
apartar de etiquetas de XML.4. Soporte de transacciones.5. Minima dependencia de librerías de terceros
y bajo consumo de recursos.6. Intregación con otros frameworks (Spring).
10
Pros y Contras
• Pros1. 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 manipulación de SQL.
• Contras1. Tiempo en modelado de los objetos que contendrán los
resultados de SQL.2. Tiempo en configurar el ambiente para usar iBATIS.
11
Cómo funciona iBATIS
12
Solicitud de ID de SQL
Solicitud SQL
Arquitectura
de iBATIS
13
sql-map-config.xml
sql-map.xml
Objeto.java
ibatis.jar
log4j.jar
commons-dbcp.jar
Ibatis.java
Esquema de Base de Datos(tienda)
14
sql-map-config.xml<sqlMapConfig>
<transactionManager type="JDBC”>
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="JDBC.ConnectionURL"
value="jdbc:derby:/Users/luisjose/tienda"/>
<property name="JDBC.Username" value=”usuario"/>
<property name="JDBC.Password" value=”usuario"/>
</dataSource>
</transactionManager>
<!-- SqlMaps -->
<sqlMap resource=”ibatis.xml.SqlMap.xml" />
</sqlMapConfig>
15
sql-map.xml
<sqlMap namespace="SqlMap"><!– SQL que busca los datos de un cliente --> <select id="busca_cliente_nombre" resultClass="ibatis.maps.Factura"> SELECT DISTINCT id_cliente AS id, nombre_cliente AS cliente, direccion_cliente AS direccion FROM nombre_cliente = #nombreCliente# </select></sqlMap>
16
<sqlMap namespace="SqlMap"><!– SQL que busca los datos de un cliente --> <select id="busca_cliente_nombre"
resultClass="ibatis.maps.Factura"> SELECT DISTINCT id_cliente AS id, nombre_cliente AS cliente, direccion_cliente AS direccion FROM nombre_cliente = #nombreCliente# </select></sqlMap>
Cliente.java y SQL
17
Ibatis.javaprivate static SqlMapClient sqlMap;
static {
try {
String resource = "ibatis/sql-map-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
}
catch(Exception e) {
e.printStackTrace();
}
}
public static SqlMapClient getSqlMapInstance() {
return sqlMap;
}
18
19
Como Queda Organizado
Extraer
Datos
1. Instanciamos la clase Ibatis que generamos.
// conexión de iBATIS
SqlMapClient sqlMap = Ibatis.getSqlMapInstance();
2. Se solicita que ejecute un identificador de un query , pero…
20
Cliente cliente = sqlMap.queryForObject("busca_cliente_nombre", “luis”);
Resultado de SQL
2222
List clienteList = sqlMap.queryForList("busca_cliente_nombre", “luis”);
Resultado de SQL
if(!(clienteList.isEmpty())) {
for(int x = 0; x < facturaList.size(); x++ ) {
Cliente cliente = (Cliente)clienteList.get(x);
System.out.println(
cliente.getId() + “ “ +
cliente.getCliente() + “ “ +
cliente.getDireccion()
);
} // fin for
} // fin for
23
Ejemplo Extracción de datos
24
25
<!– 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>
Insertar
Datos
26
Cliente cliente = new Cliente();
cliente.setCliente(“luis”);cliente.setDireccion(“dirección conocida”);cliente.setId(14);
// conexión de iBATISSqlMapClient sqlMap = Ibatis.getSqlMapInstance(); sqlMap.insert("insera_cliente", cliente);
Ejemplo de Inserción de Datos
27
Borrar
28
<!– SqlMap --><!– SQL que borra un usuario --><delete id="borrar_cliente"> DELETE FROM CLIENTE WHERE id_cliente = #id# </delete>
// Java// conexión de iBATIS SqlMapClient sqlMap = Ibatis.getSqlMapInstance(); sqlMap.delete("borrar_cliente”, 14);
Ejemplo de Borrado de Datos
29
Actualizar
30
<!– SqlMap <!– SQL que actualiza --><update id="actualiza_cliente"> UPDATE CLIENTE SET nombre_cliente = #cliente#, direccion_cliente = #direccion# WHERE id_cliente = #id# </update>
// javaCliente cliente = new Cliente();
cliente.setCliente(“luis josé”); cliente.setDireccion(“av. Central # 1, zacatepec morelos”); cliente.setId(14); // conexion a RegulonDB a travez de iBATIS SqlMapClient sqlMap = Ibatis.getSqlMapInstance(); sqlMap.update("actualiza_cliente", cliente);
Ejemplo de Actualización de Datos
31
Caso de Éxito:
RegulonDB, es una base de datos sobre el proceso de transcripción de la bacteria E. coli.
(http://regulondb.ccg.unam.mx/)
1.Las herramientas de RegulonDB estaban muy individualizadas.
2.Colocar un sitio espejo en Purdue University (EcoliHub, http:/www.ecolicommunity.org/).
32
33
Las herramientas de RegulonDB estaban muy individualizadas.
34
Colocar un sitio espejo en Purdue University (EcoliHub).
35
36
Gracias
37