410 likes | 755 Views
Esquema de Mapeo de Base de Datos Relacionales a Objetos. Luis José Muñiz Rascado Programa de Genómica Computacional Centro de Ciencias Genómicas UNAM ljmuniz@ccg.unam.mx. Contenido. Introducción Cómo funciona JDBC Propuestas de Solución Qué es el Mapeo Objeto-Relacional? Qué es iBATIS?
E N D
Esquema de Mapeo de Base de Datos Relacionales a Objetos Luis José Muñiz Rascado Programa de Genómica Computacional Centro de Ciencias Genómicas UNAM ljmuniz@ccg.unam.mx
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
Cómo funciona JDBC Solicitud SQL Comunicación Viva con la Base de Datos mientra sacamos los datos
Propuestas de Solución • Hibernate http://www.hibernate.org • Java Persistence API http://java.sun.com/javaee/technologies/persistence.jsp • iBATIS http://ibatis.apache.org/
Qué es el Mapeo Objeto-Relacional? Solicitud de SQL SQL 8
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/).
Características de iBATIS • Mapeo basado en SQL. • Trabaja con esquemas de base de datos sencillos y complejos . • Construcción de SQL dinámico o al vuelo apartar de etiquetas de XML. • Soporte de transacciones. • Minima dependencia de librerías de terceros y bajo consumo de recursos. • Intregación con otros frameworks (Spring).
Pros y Contras • Pros • Se puede utilizar cualquier tipo de sentencia SQL: UNION, OUTER JOIN. • Independencia de la base de datos. • Reusabilidad de sentencias SQL y objetos de resultados. • Mayor flexibilidad en la manipulación de SQL. • Contras • Tiempo en modelado de los objetos que contendrán los resultados de SQL. • Tiempo en configurar el ambiente para usar iBATIS.
Cómo funciona iBATIS Solicitud de ID de SQL Solicitud SQL
Arquitectura de iBATIS sql-map-config.xml Ibatis.java ibatis.jar log4j.jar commons-dbcp.jar sql-map.xml Objeto.java
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>
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>
Cliente.java y SQL <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>
Ibatis.java private 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; }
Extraer Datos • Instanciamos la clase Ibatis que generamos. // conexión de iBATIS SqlMapClient sqlMap = Ibatis.getSqlMapInstance(); • Se solicita que ejecute un identificador de un query , pero…
Resultado de SQL Cliente cliente = sqlMap.queryForObject("busca_cliente_nombre", “luis”);
Resultado de SQL List clienteList = sqlMap.queryForList("busca_cliente_nombre", “luis”); 22
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
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>
Cliente cliente = new Cliente(); cliente.setCliente(“luis”); cliente.setDireccion(“dirección conocida”); cliente.setId(14); // conexión de iBATIS SqlMapClient sqlMap = Ibatis.getSqlMapInstance(); sqlMap.insert("insera_cliente", cliente);
Borrar <!– 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);
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(); 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);
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/) • Las herramientas de RegulonDB estaban muy individualizadas. • Colocar un sitio espejo en Purdue University (EcoliHub, http:/www.ecolicommunity.org/).