SlideShare una empresa de Scribd logo
1 de 116
Descargar para leer sin conexión
Persistencia de datos
       JAVA
Persistencia de datos

Conceptos básicos
    Almacenamiento de la información después de
   finalizar el programa.
    La mayoría de los programas actuales necesitan
   preservar los datos para posterior uso.
    El sistema más común se basa en bases de datos
   relacionales.
    Mapeo entre BD relacional y objetos de aplicación.
Persistencia de datos

Problema
   Mapeo de Objetos (estructura jerárquica) a Base
  de Datos Relacional (estructura tabular) y viceversa.
Persistencia de datos

Problema
   Asociaciones, Herencia, Polimorfismo, Cascada,
  Cache, Lazy Loading, Paginación, etc.
JDBC
(Java Database Connectivity)
JDBC

Conceptos básicos
    API que permite la ejecución de operaciones sobre
   bases de datos desde Java.
    Independiente del sistema operativo y de la base
   de datos.
    Utiliza el dialecto SQL del modelo de base de datos
   que se utilice.
JDBC

Arquitectura JDBC
JDBC

Controladores JDBC
    Son adaptadores del lado-cliente para convertir las
   peticiones desde los programas Java a un protocolo
   que pueda entender DBMS.
    Controladores comerciales y libres para la mayoría
   de las bases de datos. 4 tipos:
       • Tipo 1: Puente JDBC-ODBC
       • Tipo 2: Controlador nativo de la API
       • Tipo 3: Controlador de protocolo de red
       • Tipo 4: Controlador nativo de protocolo
JDBC



EJEMPLOS JDBC
ORM
(Object-Relational Mapping)
ORM

Conceptos básicos
    Mapeo objeto-relacional (Object-Relational
   mapping, O/RM, ORM o O/R mapping)
    Técnica de programación para convertir datos
   entre un lenguaje de programación OO y el utilizado
   en una BD relacional.
    Utiliza un motor de persistencia. En la práctica crea
   una base de datos virtual orientada a objetos, sobre
   la base de datos relacional.
ORM

¿Dónde actúa?
  JavaObject                      SQL Table
  int id;
  String name;             id [int] primary key,
  String getName()
  int getId()
                           name [varchar(50)]
  void setName(String)
  void setId(int)




                               La función de un
                               O/R Mapper tiene
                                   lugar aquí
ORM

Objetivos de un ORM
    Garantizar persistencia de objetos:
       • Conexiones JDBC + Consultas SQL
    Problemas:
       • Objetos con muchas propiedades
       • Asociaciones: gestión automática vs. gestión
       manual.
       • Claves foráneas.
       • Restricciones de integridad.
ORM

¿Qué ofrece?
    Definir el mapeo en un único punto.
    Persistencia directa de objetos:
       • orm.save(myObject);
    Carga automática de objetos:
       • myObjecto = orm.load(MyObject.class,objectId)
    Buen lenguaje de consultas:
       • List myObjects = orm.find( "FROM MyObject
       object WHERE object.property = 5");
ORM

Ejemplos
   Hibernate.
   JDO 2.0.
   Etc.
JDO
(Java Data Objects)
JDO

Conceptos básicos
    Intenta solventar problema de persistencia y
   mapeo objeto-a-datos y datos-a-objeto.
    API que proporciona una forma estándar y sencilla
   de conseguir la persistencia de objetos.
    Permite trabajar con objetos POJOs (plain old Java
   objects) en lugar de con APIs propietarios.
JDO

Esquema
JDO

Implementaciones no comerciales
    JPOX: Implementación de referencia. Actualmente
   es DataNucleus.
    JDOInstruments.
    Apache JDO.
    Speedo.
    TJDO
JDO

Implementaciones comerciales
    JORM
    Kodo
    ObjectDB for Java/JDO
    Orient
    hywy's PE:J
    SignSoft intelliBO (Signsoft intelligent Business
   Objects)
    Versant
JDO

PersistenceCapable
    En la mayoría de implementaciones de JDO se
   necesita añadir la persistencia a las clases
   compiladas.
    Enhancer (“mejorador”): Herramienta que agrega
   automáticamente código para hacer persistentes las
   clases desarrolladas.
    Esta modificación de la clase compilada (bytecode)
   conserva perfectamente los números de línea en
   seguimientos de pila y no afecta a la depuración.
JDO

Enhancer (“Mejorador”)
 1. Se crea la clase (Magazine.java en el ejemplo)
 2. Se compila la clase.
 3 Se ejecuta el Enhancer sobre la clase compilada
JDO



EJEMPLOS JDO
JPA
(Java Persistence API)
JPA

Conceptos básicos
    Java Persistence API (JPA) estándar para mapeo
   de objetos Java a una base de datos relacional.
    Productos propietarios de Mapping como Hibernate
   o TopLink pueden hacer uso de JPA.
    Ha sido incluida en el estándar EJB3.
    Cubre tres áreas:
       • La API definida en javax.persistence.package.
       • La Java Persistence Query Language (JPQL).
       • Metadatos objeto/relacional.
JPA

Ventajas
    Permite crear la tabla del modelo de datos
   correspondiente a una clase.
    Independencia de base de datos.
    Persistencia no sólo a base de datos, también
   objetos, ficheros de texto plano, XML, etc.
JPA

Entity
    Unidad básica de persistencia en JPA.
    Clase Java con metadatos para describir cómo se
   mapean las tablas de bases de datos.
    Los metadatos se expresan con annotations o con
   ficheros XML.
    Tendrá una annotation @Entity y un campo
   identificado con @Id → la clave primaria de una
   tabla.
JPA

Entity - Ejemplo
JPA

Entity - Ejemplo
JPA

Annotations
    Annotations de mapeo son:




    Annotations para sobrescribir nombres:
JPA

Annotations
    Annotations para indicar tipos de clases u otros
   aspectos del modelo:
JPA

EntityManager
    Se utiliza para crear entities, eliminar entities, crear
   queries para devolver un conjuto de entites, etc.
    Dos tipos de EntityManagers:
JPA

EntityManager - Ejemplo
 (non-managed)
JPA

EntityManager - Ejemplo
 (Container-managed)
JPA

EntityManager - Ejemplo
JPA

Transacciones
    Dos tipos de transacciones:
       • JTA container transactions: Las
       transacciones empieza y terminan usando las
       técnicas normales de contenedores
       transaccionales como EJB, Spring, etc.
       • Resource local transactions: La
       transaccionalidad es manual a través de
       EntityTransaction.
JPA

Transacciones – Resource local
JPA

Queries
    Dynamic queries: Objetos creados desde un
   EntityManager y después ejecutados.
    Query criteria: Se especifica en tiempo de
   ejecución mediante JPQL (Java Persistence Query
   Language).
    Sobre el objeto Query se pueden ejecutar varios
   métodos para configurar dicho objeto.
JPA

Queries - Ejemplo
    Query que limita el resultado en 100 registros:
JPA

NamedQuery
   Query que se define de manera estática y se
  instancia y ejecuta en tiempo de ejecución.
   Puede ser definida a través de annotation dentro
  de una clase Entity.




                               Named parameter
JPA

NamedQuery - Ejemplo
    Ejecutando NamedQuery con parámetros:
JPA

JPQL
   Java Persistence Query Language.
   Es parecido a SQL pero trabaja sobre entities y sus
  atributos persistentes mapeados, en vez de sobre
  Esquemas SQL.
   Muchas de las funciones y palabras reservadas de
  SQL están soportadas en JPQL.
JPA

JPQL
   Existen 3 tipos básicos de sentencias JPQL:
       • select_clause from_clause [where_clause]
       [groupby_clause] [having_clause]
       [orderby_clause]
       • update_clause [where_clause]
       • delete_clause [where_clause]
   Gramática completa en la especificación JPA
JPA

Configuración
    Se especifica en el fichero persistence.xml
    El fichero persistence.xml deberá situarse en el
   directorio META-INF del proyecto.
    Especifica la conexión a la base de datos y otros
   aspectos de dicha conexión.
JPA



EJEMPLOS JPA
Mybatis
MyBatis

Conceptos básicos
    MyBatis era anteriormente conocido como iBATIS.
    Herramienta de persistencia disponible para Java y
   .NET
    Mapea SQL y procedimientos almacenados con
   objetos a partir de ficheros XML o anotaciones.
    Software libre desarrollado bajo Licencia Apache
   2.0
MyBatis

Ventajas
    Herramienta tremendamente sencilla.
    Simplifica la programación frente al uso directo de
   JDBC.
    Ahorra tiempo y evita errores habituales como:
       • olvidar cerrar conexión a base de datos.
       • realizar incorrectamente un mapeo de datos.
       • exceder el tamaño de un result set.
       • obtener varios resultados cuando se esperaba
       sólo uno
MyBatis

Caché
   Soporta el uso de caché declarativa.
   Es posible indicar en el fichero XML que una
  sentencia debe ser cacheada.
   MyBatis buscará los datos en una caché antes de
  solicitarlos a la base de datos.
   Se soportan varias cachés:
      • OSCache, EHCache y Hazelcast
      • Soporta código propio de integración con otras
      cachés.
MyBatis

Generador de código
    El generador lee los metadatos de la base de datos
   para generar los beans, DAOs (simples o de Spring)
   y ficheros XML que implementan el "CRUD" (alta,
   baja, modificación, borrado) de las tablas indicadas.
    Permite realizar modificaciones en el código
   generado que serán preservadas en caso de
   regeneración.
    Disponible también formato plugin para Eclipse.
MyBatis

Integración con Spring
    Dispone de un módulo de integración con Spring
   Framework.
    El modulo permite que MyBatis participe en
   transacciones Spring.
    Permite crear mappers y sesiones e inyectarlos en
   beans de servicio.
MyBatis

Integración con Google Guice
    Módulo de integración con Google Guice.
    Soporte transaccional declarativo mediante la
   anotación @Transactional.
MyBatis

MyBatis Migrations
    Herramienta Java de línea de comandos que
   permite realizar un seguimiento de los cambios de
   esquema de la base de datos.
    Almacena ficheros DDL con cambios incrementales
   (denominados migrations).
    Es posible consultar el estado de la base de datos,
   aplicar cambios al esquema e incluso deshacerlos.
    Detecta y soluciona cambios concurrentes del
   esquema de base de datos por distintos
   desarrolladores.
MyBatis

MyBatis Migrations
    Descargar MyBatis Migrations aquí.
    Documentación de MyBatis Migrations aquí.
    Video de MyBatis Migrations aquí.
MyBatis

Configuración
    Las aplicaciones MyBatis se centran en
   SqlSessionFactory.
    SqlSessionFactory se puede obtener a través de un
   SqlSessionFactoryBuilder.
    SqlSessionFactoryBuilder se configura a través de un
   fichero de configuración o directamente desde Java.
MyBatis

Configuración – Con XML
MyBatis

Configuración – Sin XML
MyBatis

Mappers
   Núcleo de MyBatis.
   Ficheros XML donde se definen las SQL.
   Se delegan las sentencias a estos ficheros,
  dejando el código Java libre de SQL.
   Mucho control sobre sentencias SQL.
MyBatis

Mappers - Elementos
    cache: Configuration of the cache for a given
   namespace.
    cache-ref: Reference to a cache configuration from
   another namespace.
    resultMap: The most complicated and powerful
   element that describes how to load your objects from
   the database result sets.
    sql: A reusable chunk of SQL that can be
   referenced by other statements.
MyBatis

Mappers - Elementos
    insert: A mapped INSERT statement.
    update: A mapped UPDATE statement.
    delete: A mapped DELETE statement.
    select: A mapped SELECT statement.
MyBatis

Dynamic SQL
   MyBatis permite introducir condiciones en SQL.
   Elementos de Dynamic SQL:
      • if
      • choose (when, otherwise)
      • trim (where, set)
      • foreach
MyBatis

Dynamic SQL - IF
 <select id="findActiveBlogWithTitleLike"
        parameterType="Blog" resultType="Blog">
        SELECT * FROM BLOG
        WHERE state = 'ACTIVE'
        <if test="title != null">
                AND title like #{title}
        </if>
 </select>
MyBatis

Dynamic SQL - choose
 <select id=”findActiveBlogLike”
           parameterType=”Blog” resultType=”Blog”>
           SELECT * FROM BLOG WHERE state = ‘ACTIVE’
           <choose>
                   <when test=”title != null”>
                            AND title like #{title}
                   </when>
                   <when test=”author != null and author.name != null”>
                            AND author_name like #{author.name}
                   </when>
                   <otherwise>
                            AND featured = 1
                   </otherwise>
           </choose>
 </select>
MyBatis

Dynamic SQL - trim
 <select id=”findActiveBlogLike” parameterType=”Blog” resultType=”Blog”>
 SELECT * FROM BLOG
 <where>
           <if test=”state != null”>
                     state = #{state}
           </if>
           <if test=”title != null”>
                     AND title like #{title}
           </if>
           <if test=”author!=null and author.name!=null”>
                     AND author_name like #{author.name}
           </if>
 </where>
 </select>
MyBatis

Dynamic SQL - foreach
 <select id="selectPostIn" resultType="domain.blog.Post">
 SELECT * FROM POST P WHERE ID in
           <foreach item="item" index="index" collection="list" open="("
 separator="," close=")">
                    #{item}
           </foreach>
 </select>
MyBatis



EJEMPLOS MyBatis
Hibernate
Hibernate

Conceptos básicos
    Herramienta de Mapeo objeto-relacional (ORM)
   para Java (también para .Net → NHibernate).
    Facilita el mapeo de entre BD relacional y modelo
   de objetos de una aplicación.
    Hace uso de archivos declarativos (XML) o
   anotaciones.
    Software libre, distribuido bajo licencia GNU LGPL.
Hibernate

Conceptos básicos
    Ofrece un lenguaje de consulta de datos HQL
   (Hibernate Query Language).
    API para construir las consultas en programación
   (conocida como "criteria").
    Se puede usar en aplicaciones Java
   independientes o en Java EE, mediante Hibernate
   Annotations (implementa JPA).
Hibernate

¿Porqué Hibernate?
    OpenSource.
    Buena documentación y estabilidad.
    Gran cantidad de descargas.
    Utiliza clases de forma directa: no genera código a
   partir de descriptores, ni implementar interfaces, ni
   heredar de una superclase...
    Independencia del SGBD.
Hibernate

Arquitectura simple
Hibernate

Arquitectura avanzada
Hibernate

Configuración
    El funcionamiento de Hibernate se puede
   configurar mediante dos ficheros:
       • hibernate.properties
       • hibernate.cfg.xml
    Se realizan los mapeos entre las tablas y las clases
   mediante ficheros hbm.xml
    Integración con infraestructura J2EE: utilización de
   datasources, enlazado JNDI, JTA...
Hibernate

Ejemplo de hibernate.cfg.xml
Hibernate

Ejemplo de Cliente.hbm.xml
Hibernate

POJO (Plain Old Java Objects)
Hibernate

Ejemplo API (insert)
Hibernate

Ejemplo API (select)
Hibernate

Asociaciones
    Definimos una nueva clase → Cuenta




    Creamos las nuevas tablas y el nuevo fichero de
   mapeo.
Hibernate

Asociaciones
    Implementamos las relaciones en las clases de
   dominio:
       • private Set<Cuenta> cuentas = new
       HashSet<Cuenta>();
    Mapeamos la relación:
Hibernate

    Configuración JDBC

                           Propiedades JDBC




Propiedades
Datasource
Hibernate

hibernate.dialect
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Mapeando Hibernate - ID
    Clases para generar id:
        • increment (SELECT MAX()... )
        • identity (DB2, MySQL, MS SQLServer, etc.)
        • assigned
        • uuid (IP, tiempo arranque JVM, tiempo
        sistema, contador único JVM)
        • hilo
        • native (identity, sequence o hilo)
        • sequence (DB2, PostgreSQL, Oracle, SAP DB)
Hibernate

Mapeando Hibernate




    Discrimina subclases. Se cargarán unas u otras en
   función de ciertas condiciones.
    Ejemplo
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping - Component
  Un componente es un objeto contenido que es
 persistido como un tipo de valor, no una referencia
 de entidad.
  El término "componente" hace referencia a la
 noción orientada a objetos de composición y no a
 componentes a nivel de arquitectura.
  Ejemplo
Hibernate

Hibernate mapping - Component
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Hibernate mapping
Hibernate

Asociaciones unidireccionales
    Sin join:
        • 1-n → <set> + <one-to-many>
        • n-1 → <many-to-one>
        • 1-1 → <many-to-one unique=“true”>
    Con join:
       • 1-n → <set> + <many-to-many unique=“true”>
       • n-1 → <join> + <many-to-one>
       • 1-1 → <join> + <many-to-one unique=“true”>
       • m-n → <set> + <many-to-many>
Hibernate

Consideraciones de rendimiento
    ¿Cuándo se recogen los elementos de una
   asociación?
    Por defecto lazy=“true” (la colección se recoge
   cuando se realice alguna operación sobre ella)
    En la versión 2 por defecto lazy=“false”.
Hibernate

Persistencia de objetos
    Alta de nuevos objetos → session.save(obj)
    Recuperar objetos:
       • obj = (MyObj)session.get(MyObj.class,id)
       • obj = (MyObj)session.load(MyObj.class,id)
    Baja de objetos → session.delete(obj)
    Modificación de objetos:
       • MyObj obj = (MyObj)session.load(MyObj.class,id);
       • obj.setProperty(valor);
       • session.flush();
Hibernate

HQL
Hibernate

HQL
Hibernate

HQL
Hibernate

HQL
Hibernate

HQL
Hibernate

HQL
   Funciones de agregación:
      • avg(), sum(), min(), max()
      • count(*)
      • count(distinct ...), count(all ...)
   Queries polimorficas → “from Object”
Hibernate

HQL
   Expresiones:
      • Operadores (matemáticos, comparación,
      lógicos)
      • in, not in, between, is null, is not null, is empty,
      is not empty
      • funciones de cadena: ||, trim, substring, lower,
      upper, length.
      • current_date, current_time, current_timestamp
Hibernate

Interface org.hibernate.Criteria
    Interface que representa una consulta a una clase
   persistente.




    Se añaden restricciones o condiciones para filtrar
   la consulta.
Hibernate

Herencia
    Estrategias de mapeo:
        • Una tabla por jerarquía
        • Una tabla por cada subclase
        • Una tabla por cada clase concreta
    Una tabla por jerarquía:
       • Requiere un discriminador
       • Las columnas declaradas en subclases no
       pueden ser “NOT NULL”
       • La mayoría de la información → en la padre.
Hibernate

Herencia
Hibernate

Herencia
    Una tabla por cada subclase:
       • Requiere tantas tablas como clases existan
       • Las tablas “hijas” tienen claves foráneas a la
       tabla que representa el “padre” → Relación one-
       to-one
       • Puede implementarse tanto con discriminador
       como sin él.
       • Se suele utilizar cuando todas las clases son
       concretas y la información esta repartida
       uniformemente.
Hibernate

Herencia
Hibernate

Herencia
Hibernate

Herencia
    Una tabla por cada clase concreta:
       • Requiere tantas tablas como clases concretas
       existan.
       • Tiene una limitación → Las propiedades
       mapeadas en las superclases se tienen que
       llamar igual en todas las tablas que mapeen las
       subclases.
       • La superclase puede ser abstracta o concreta.
       Si es abstracta se marcará en el fichero de
       mapeo con abstract=true.
Hibernate

Herencia
Persistencia de datos


        FIN
                            Iker Canarias
                iker.canarias@gmail.com

Más contenido relacionado

La actualidad más candente

Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisisinnovalabcun
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetosdesimartinez
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwareJose Luis Bugarin Peche
 
Analisis y diseño de sistema bibliotecario
Analisis y diseño de sistema bibliotecarioAnalisis y diseño de sistema bibliotecario
Analisis y diseño de sistema bibliotecarioJose Guzman
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacionalLuis Jherry
 
Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Yaskelly Yedra
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datosnahun1385
 
Analisis y especificacion de requerimientos
Analisis y especificacion de requerimientosAnalisis y especificacion de requerimientos
Analisis y especificacion de requerimientosUPTP
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Jose R. Hilera
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASEI R
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre ObjetosEmilio Aviles Avila
 
Base de datos (diseño conceptual,logico y fisico)
Base de datos (diseño conceptual,logico y fisico)Base de datos (diseño conceptual,logico y fisico)
Base de datos (diseño conceptual,logico y fisico)claudiachiri
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetosyoiner santiago
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador SintácticoPablo Guerra
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionIrving Che
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacionalMaria Garcia
 
Planeacion y elaboración de proyectos de software
Planeacion y elaboración de proyectos de softwarePlaneacion y elaboración de proyectos de software
Planeacion y elaboración de proyectos de softwareTtomas Carvajal
 
Javaserver Faces (jsf)
Javaserver Faces (jsf)Javaserver Faces (jsf)
Javaserver Faces (jsf)Enrique Polo
 
Diagramas de objetos
Diagramas de objetosDiagramas de objetos
Diagramas de objetosstill01
 

La actualidad más candente (20)

Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisis
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetos
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_software
 
Analisis y diseño de sistema bibliotecario
Analisis y diseño de sistema bibliotecarioAnalisis y diseño de sistema bibliotecario
Analisis y diseño de sistema bibliotecario
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datos
 
Analisis y especificacion de requerimientos
Analisis y especificacion de requerimientosAnalisis y especificacion de requerimientos
Analisis y especificacion de requerimientos
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASE
 
Yacc
YaccYacc
Yacc
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre Objetos
 
Base de datos (diseño conceptual,logico y fisico)
Base de datos (diseño conceptual,logico y fisico)Base de datos (diseño conceptual,logico y fisico)
Base de datos (diseño conceptual,logico y fisico)
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Planeacion y elaboración de proyectos de software
Planeacion y elaboración de proyectos de softwarePlaneacion y elaboración de proyectos de software
Planeacion y elaboración de proyectos de software
 
Javaserver Faces (jsf)
Javaserver Faces (jsf)Javaserver Faces (jsf)
Javaserver Faces (jsf)
 
Diagramas de objetos
Diagramas de objetosDiagramas de objetos
Diagramas de objetos
 

Destacado

Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con HibernateMauro Gomez Mejia
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSDarwin Durand
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Ronald Cuello
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANSWilliam Diaz S
 
Calculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCCalculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCIgnacio Aular Reyes
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAGabriel Suarez
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 
Introducción a ORMs
Introducción a ORMsIntroducción a ORMs
Introducción a ORMsmaxfontana90
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access LayerTodd Anglin
 
Microsoft Data Access Technologies
Microsoft Data Access TechnologiesMicrosoft Data Access Technologies
Microsoft Data Access TechnologiesDavid Chou
 
Gestiondered 100222091702-phpapp01
Gestiondered 100222091702-phpapp01Gestiondered 100222091702-phpapp01
Gestiondered 100222091702-phpapp01Prof. Javier Troya
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 javajbersosa
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCCarlos Hernando
 
Introducción práctica a JPA2
Introducción práctica a JPA2Introducción práctica a JPA2
Introducción práctica a JPA2jion1987
 

Destacado (20)

Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con Hibernate
 
JPA en Netbeans
JPA en NetbeansJPA en Netbeans
JPA en Netbeans
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
 
Calculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCCalculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVC
 
Curso basico de base de datos con java
Curso basico de base de datos con javaCurso basico de base de datos con java
Curso basico de base de datos con java
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Introducción a ORMs
Introducción a ORMsIntroducción a ORMs
Introducción a ORMs
 
Hibernate
HibernateHibernate
Hibernate
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access Layer
 
Microsoft Data Access Technologies
Microsoft Data Access TechnologiesMicrosoft Data Access Technologies
Microsoft Data Access Technologies
 
Gestiondered 100222091702-phpapp01
Gestiondered 100222091702-phpapp01Gestiondered 100222091702-phpapp01
Gestiondered 100222091702-phpapp01
 
Clase No.2 Preparando el Ambiente de Java
Clase No.2 Preparando el Ambiente de Java Clase No.2 Preparando el Ambiente de Java
Clase No.2 Preparando el Ambiente de Java
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 
Jdb ccompleto
Jdb ccompletoJdb ccompleto
Jdb ccompleto
 
Java con bd
Java con bdJava con bd
Java con bd
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Introducción práctica a JPA2
Introducción práctica a JPA2Introducción práctica a JPA2
Introducción práctica a JPA2
 

Similar a Persistencia de datos en Java (20)

Java persitence api
Java persitence apiJava persitence api
Java persitence api
 
INSTALACION DE SERVIDORES - JPA
INSTALACION DE SERVIDORES - JPAINSTALACION DE SERVIDORES - JPA
INSTALACION DE SERVIDORES - JPA
 
Jpa
JpaJpa
Jpa
 
Persistence
PersistencePersistence
Persistence
 
Hibernate 3.2 short manual
Hibernate 3.2 short manualHibernate 3.2 short manual
Hibernate 3.2 short manual
 
JAVA 2 EE
JAVA 2 EEJAVA 2 EE
JAVA 2 EE
 
jsf
jsfjsf
jsf
 
Conceptos de hibernate
Conceptos de hibernateConceptos de hibernate
Conceptos de hibernate
 
Orm presentación final
Orm presentación finalOrm presentación final
Orm presentación final
 
Curso Java Avanzado 5 Ejb
Curso Java Avanzado   5 EjbCurso Java Avanzado   5 Ejb
Curso Java Avanzado 5 Ejb
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
JDBC
JDBCJDBC
JDBC
 
Jpa vs hibernate
Jpa vs hibernateJpa vs hibernate
Jpa vs hibernate
 
Capitulo_3_1.pptx
Capitulo_3_1.pptxCapitulo_3_1.pptx
Capitulo_3_1.pptx
 
Motor de persistencia nhibernate
Motor de persistencia nhibernateMotor de persistencia nhibernate
Motor de persistencia nhibernate
 
J2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos SlidesJ2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos Slides
 
Master j2ee
Master j2eeMaster j2ee
Master j2ee
 
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
 
Hibernate - JPA @luce
Hibernate - JPA @luceHibernate - JPA @luce
Hibernate - JPA @luce
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)
 

Más de Iker Canarias

Subversion - buenas prácticas
Subversion - buenas prácticasSubversion - buenas prácticas
Subversion - buenas prácticasIker Canarias
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache AntIker Canarias
 
Introducción a JUnit
Introducción a JUnitIntroducción a JUnit
Introducción a JUnitIker Canarias
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones JavaIker Canarias
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a TomcatIker Canarias
 
Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBossIker Canarias
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareIker Canarias
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIker Canarias
 

Más de Iker Canarias (10)

Subversion - buenas prácticas
Subversion - buenas prácticasSubversion - buenas prácticas
Subversion - buenas prácticas
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
 
Introducción a JUnit
Introducción a JUnitIntroducción a JUnit
Introducción a JUnit
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones Java
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBoss
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP Apache
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Último (10)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Persistencia de datos en Java

  • 2. Persistencia de datos Conceptos básicos  Almacenamiento de la información después de finalizar el programa.  La mayoría de los programas actuales necesitan preservar los datos para posterior uso.  El sistema más común se basa en bases de datos relacionales.  Mapeo entre BD relacional y objetos de aplicación.
  • 3. Persistencia de datos Problema  Mapeo de Objetos (estructura jerárquica) a Base de Datos Relacional (estructura tabular) y viceversa.
  • 4. Persistencia de datos Problema  Asociaciones, Herencia, Polimorfismo, Cascada, Cache, Lazy Loading, Paginación, etc.
  • 6. JDBC Conceptos básicos  API que permite la ejecución de operaciones sobre bases de datos desde Java.  Independiente del sistema operativo y de la base de datos.  Utiliza el dialecto SQL del modelo de base de datos que se utilice.
  • 8. JDBC Controladores JDBC  Son adaptadores del lado-cliente para convertir las peticiones desde los programas Java a un protocolo que pueda entender DBMS.  Controladores comerciales y libres para la mayoría de las bases de datos. 4 tipos: • Tipo 1: Puente JDBC-ODBC • Tipo 2: Controlador nativo de la API • Tipo 3: Controlador de protocolo de red • Tipo 4: Controlador nativo de protocolo
  • 11. ORM Conceptos básicos  Mapeo objeto-relacional (Object-Relational mapping, O/RM, ORM o O/R mapping)  Técnica de programación para convertir datos entre un lenguaje de programación OO y el utilizado en una BD relacional.  Utiliza un motor de persistencia. En la práctica crea una base de datos virtual orientada a objetos, sobre la base de datos relacional.
  • 12. ORM ¿Dónde actúa? JavaObject SQL Table int id; String name; id [int] primary key, String getName() int getId() name [varchar(50)] void setName(String) void setId(int) La función de un O/R Mapper tiene lugar aquí
  • 13. ORM Objetivos de un ORM  Garantizar persistencia de objetos: • Conexiones JDBC + Consultas SQL  Problemas: • Objetos con muchas propiedades • Asociaciones: gestión automática vs. gestión manual. • Claves foráneas. • Restricciones de integridad.
  • 14. ORM ¿Qué ofrece?  Definir el mapeo en un único punto.  Persistencia directa de objetos: • orm.save(myObject);  Carga automática de objetos: • myObjecto = orm.load(MyObject.class,objectId)  Buen lenguaje de consultas: • List myObjects = orm.find( "FROM MyObject object WHERE object.property = 5");
  • 15. ORM Ejemplos  Hibernate.  JDO 2.0.  Etc.
  • 17. JDO Conceptos básicos  Intenta solventar problema de persistencia y mapeo objeto-a-datos y datos-a-objeto.  API que proporciona una forma estándar y sencilla de conseguir la persistencia de objetos.  Permite trabajar con objetos POJOs (plain old Java objects) en lugar de con APIs propietarios.
  • 19. JDO Implementaciones no comerciales  JPOX: Implementación de referencia. Actualmente es DataNucleus.  JDOInstruments.  Apache JDO.  Speedo.  TJDO
  • 20. JDO Implementaciones comerciales  JORM  Kodo  ObjectDB for Java/JDO  Orient  hywy's PE:J  SignSoft intelliBO (Signsoft intelligent Business Objects)  Versant
  • 21. JDO PersistenceCapable  En la mayoría de implementaciones de JDO se necesita añadir la persistencia a las clases compiladas.  Enhancer (“mejorador”): Herramienta que agrega automáticamente código para hacer persistentes las clases desarrolladas.  Esta modificación de la clase compilada (bytecode) conserva perfectamente los números de línea en seguimientos de pila y no afecta a la depuración.
  • 22. JDO Enhancer (“Mejorador”) 1. Se crea la clase (Magazine.java en el ejemplo) 2. Se compila la clase. 3 Se ejecuta el Enhancer sobre la clase compilada
  • 25. JPA Conceptos básicos  Java Persistence API (JPA) estándar para mapeo de objetos Java a una base de datos relacional.  Productos propietarios de Mapping como Hibernate o TopLink pueden hacer uso de JPA.  Ha sido incluida en el estándar EJB3.  Cubre tres áreas: • La API definida en javax.persistence.package. • La Java Persistence Query Language (JPQL). • Metadatos objeto/relacional.
  • 26. JPA Ventajas  Permite crear la tabla del modelo de datos correspondiente a una clase.  Independencia de base de datos.  Persistencia no sólo a base de datos, también objetos, ficheros de texto plano, XML, etc.
  • 27. JPA Entity  Unidad básica de persistencia en JPA.  Clase Java con metadatos para describir cómo se mapean las tablas de bases de datos.  Los metadatos se expresan con annotations o con ficheros XML.  Tendrá una annotation @Entity y un campo identificado con @Id → la clave primaria de una tabla.
  • 30. JPA Annotations  Annotations de mapeo son:  Annotations para sobrescribir nombres:
  • 31. JPA Annotations  Annotations para indicar tipos de clases u otros aspectos del modelo:
  • 32. JPA EntityManager  Se utiliza para crear entities, eliminar entities, crear queries para devolver un conjuto de entites, etc.  Dos tipos de EntityManagers:
  • 34. JPA EntityManager - Ejemplo (Container-managed)
  • 36. JPA Transacciones  Dos tipos de transacciones: • JTA container transactions: Las transacciones empieza y terminan usando las técnicas normales de contenedores transaccionales como EJB, Spring, etc. • Resource local transactions: La transaccionalidad es manual a través de EntityTransaction.
  • 38. JPA Queries  Dynamic queries: Objetos creados desde un EntityManager y después ejecutados.  Query criteria: Se especifica en tiempo de ejecución mediante JPQL (Java Persistence Query Language).  Sobre el objeto Query se pueden ejecutar varios métodos para configurar dicho objeto.
  • 39. JPA Queries - Ejemplo  Query que limita el resultado en 100 registros:
  • 40. JPA NamedQuery  Query que se define de manera estática y se instancia y ejecuta en tiempo de ejecución.  Puede ser definida a través de annotation dentro de una clase Entity. Named parameter
  • 41. JPA NamedQuery - Ejemplo  Ejecutando NamedQuery con parámetros:
  • 42. JPA JPQL  Java Persistence Query Language.  Es parecido a SQL pero trabaja sobre entities y sus atributos persistentes mapeados, en vez de sobre Esquemas SQL.  Muchas de las funciones y palabras reservadas de SQL están soportadas en JPQL.
  • 43. JPA JPQL  Existen 3 tipos básicos de sentencias JPQL: • select_clause from_clause [where_clause] [groupby_clause] [having_clause] [orderby_clause] • update_clause [where_clause] • delete_clause [where_clause]  Gramática completa en la especificación JPA
  • 44. JPA Configuración  Se especifica en el fichero persistence.xml  El fichero persistence.xml deberá situarse en el directorio META-INF del proyecto.  Especifica la conexión a la base de datos y otros aspectos de dicha conexión.
  • 47. MyBatis Conceptos básicos  MyBatis era anteriormente conocido como iBATIS.  Herramienta de persistencia disponible para Java y .NET  Mapea SQL y procedimientos almacenados con objetos a partir de ficheros XML o anotaciones.  Software libre desarrollado bajo Licencia Apache 2.0
  • 48. MyBatis Ventajas  Herramienta tremendamente sencilla.  Simplifica la programación frente al uso directo de JDBC.  Ahorra tiempo y evita errores habituales como: • olvidar cerrar conexión a base de datos. • realizar incorrectamente un mapeo de datos. • exceder el tamaño de un result set. • obtener varios resultados cuando se esperaba sólo uno
  • 49. MyBatis Caché  Soporta el uso de caché declarativa.  Es posible indicar en el fichero XML que una sentencia debe ser cacheada.  MyBatis buscará los datos en una caché antes de solicitarlos a la base de datos.  Se soportan varias cachés: • OSCache, EHCache y Hazelcast • Soporta código propio de integración con otras cachés.
  • 50. MyBatis Generador de código  El generador lee los metadatos de la base de datos para generar los beans, DAOs (simples o de Spring) y ficheros XML que implementan el "CRUD" (alta, baja, modificación, borrado) de las tablas indicadas.  Permite realizar modificaciones en el código generado que serán preservadas en caso de regeneración.  Disponible también formato plugin para Eclipse.
  • 51. MyBatis Integración con Spring  Dispone de un módulo de integración con Spring Framework.  El modulo permite que MyBatis participe en transacciones Spring.  Permite crear mappers y sesiones e inyectarlos en beans de servicio.
  • 52. MyBatis Integración con Google Guice  Módulo de integración con Google Guice.  Soporte transaccional declarativo mediante la anotación @Transactional.
  • 53. MyBatis MyBatis Migrations  Herramienta Java de línea de comandos que permite realizar un seguimiento de los cambios de esquema de la base de datos.  Almacena ficheros DDL con cambios incrementales (denominados migrations).  Es posible consultar el estado de la base de datos, aplicar cambios al esquema e incluso deshacerlos.  Detecta y soluciona cambios concurrentes del esquema de base de datos por distintos desarrolladores.
  • 54. MyBatis MyBatis Migrations  Descargar MyBatis Migrations aquí.  Documentación de MyBatis Migrations aquí.  Video de MyBatis Migrations aquí.
  • 55. MyBatis Configuración  Las aplicaciones MyBatis se centran en SqlSessionFactory.  SqlSessionFactory se puede obtener a través de un SqlSessionFactoryBuilder.  SqlSessionFactoryBuilder se configura a través de un fichero de configuración o directamente desde Java.
  • 58. MyBatis Mappers  Núcleo de MyBatis.  Ficheros XML donde se definen las SQL.  Se delegan las sentencias a estos ficheros, dejando el código Java libre de SQL.  Mucho control sobre sentencias SQL.
  • 59. MyBatis Mappers - Elementos  cache: Configuration of the cache for a given namespace.  cache-ref: Reference to a cache configuration from another namespace.  resultMap: The most complicated and powerful element that describes how to load your objects from the database result sets.  sql: A reusable chunk of SQL that can be referenced by other statements.
  • 60. MyBatis Mappers - Elementos  insert: A mapped INSERT statement.  update: A mapped UPDATE statement.  delete: A mapped DELETE statement.  select: A mapped SELECT statement.
  • 61. MyBatis Dynamic SQL  MyBatis permite introducir condiciones en SQL.  Elementos de Dynamic SQL: • if • choose (when, otherwise) • trim (where, set) • foreach
  • 62. MyBatis Dynamic SQL - IF <select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = 'ACTIVE' <if test="title != null"> AND title like #{title} </if> </select>
  • 63. MyBatis Dynamic SQL - choose <select id=”findActiveBlogLike” parameterType=”Blog” resultType=”Blog”> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <choose> <when test=”title != null”> AND title like #{title} </when> <when test=”author != null and author.name != null”> AND author_name like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose> </select>
  • 64. MyBatis Dynamic SQL - trim <select id=”findActiveBlogLike” parameterType=”Blog” resultType=”Blog”> SELECT * FROM BLOG <where> <if test=”state != null”> state = #{state} </if> <if test=”title != null”> AND title like #{title} </if> <if test=”author!=null and author.name!=null”> AND author_name like #{author.name} </if> </where> </select>
  • 65. MyBatis Dynamic SQL - foreach <select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
  • 68. Hibernate Conceptos básicos  Herramienta de Mapeo objeto-relacional (ORM) para Java (también para .Net → NHibernate).  Facilita el mapeo de entre BD relacional y modelo de objetos de una aplicación.  Hace uso de archivos declarativos (XML) o anotaciones.  Software libre, distribuido bajo licencia GNU LGPL.
  • 69. Hibernate Conceptos básicos  Ofrece un lenguaje de consulta de datos HQL (Hibernate Query Language).  API para construir las consultas en programación (conocida como "criteria").  Se puede usar en aplicaciones Java independientes o en Java EE, mediante Hibernate Annotations (implementa JPA).
  • 70. Hibernate ¿Porqué Hibernate?  OpenSource.  Buena documentación y estabilidad.  Gran cantidad de descargas.  Utiliza clases de forma directa: no genera código a partir de descriptores, ni implementar interfaces, ni heredar de una superclase...  Independencia del SGBD.
  • 73. Hibernate Configuración  El funcionamiento de Hibernate se puede configurar mediante dos ficheros: • hibernate.properties • hibernate.cfg.xml  Se realizan los mapeos entre las tablas y las clases mediante ficheros hbm.xml  Integración con infraestructura J2EE: utilización de datasources, enlazado JNDI, JTA...
  • 76. Hibernate POJO (Plain Old Java Objects)
  • 79. Hibernate Asociaciones  Definimos una nueva clase → Cuenta  Creamos las nuevas tablas y el nuevo fichero de mapeo.
  • 80. Hibernate Asociaciones  Implementamos las relaciones en las clases de dominio: • private Set<Cuenta> cuentas = new HashSet<Cuenta>();  Mapeamos la relación:
  • 81. Hibernate Configuración JDBC Propiedades JDBC Propiedades Datasource
  • 86. Hibernate Mapeando Hibernate - ID  Clases para generar id: • increment (SELECT MAX()... ) • identity (DB2, MySQL, MS SQLServer, etc.) • assigned • uuid (IP, tiempo arranque JVM, tiempo sistema, contador único JVM) • hilo • native (identity, sequence o hilo) • sequence (DB2, PostgreSQL, Oracle, SAP DB)
  • 87. Hibernate Mapeando Hibernate  Discrimina subclases. Se cargarán unas u otras en función de ciertas condiciones.  Ejemplo
  • 90. Hibernate Hibernate mapping - Component  Un componente es un objeto contenido que es persistido como un tipo de valor, no una referencia de entidad.  El término "componente" hace referencia a la noción orientada a objetos de composición y no a componentes a nivel de arquitectura.  Ejemplo
  • 98. Hibernate Asociaciones unidireccionales  Sin join: • 1-n → <set> + <one-to-many> • n-1 → <many-to-one> • 1-1 → <many-to-one unique=“true”>  Con join: • 1-n → <set> + <many-to-many unique=“true”> • n-1 → <join> + <many-to-one> • 1-1 → <join> + <many-to-one unique=“true”> • m-n → <set> + <many-to-many>
  • 99. Hibernate Consideraciones de rendimiento  ¿Cuándo se recogen los elementos de una asociación?  Por defecto lazy=“true” (la colección se recoge cuando se realice alguna operación sobre ella)  En la versión 2 por defecto lazy=“false”.
  • 100. Hibernate Persistencia de objetos  Alta de nuevos objetos → session.save(obj)  Recuperar objetos: • obj = (MyObj)session.get(MyObj.class,id) • obj = (MyObj)session.load(MyObj.class,id)  Baja de objetos → session.delete(obj)  Modificación de objetos: • MyObj obj = (MyObj)session.load(MyObj.class,id); • obj.setProperty(valor); • session.flush();
  • 106. Hibernate HQL  Funciones de agregación: • avg(), sum(), min(), max() • count(*) • count(distinct ...), count(all ...)  Queries polimorficas → “from Object”
  • 107. Hibernate HQL  Expresiones: • Operadores (matemáticos, comparación, lógicos) • in, not in, between, is null, is not null, is empty, is not empty • funciones de cadena: ||, trim, substring, lower, upper, length. • current_date, current_time, current_timestamp
  • 108. Hibernate Interface org.hibernate.Criteria  Interface que representa una consulta a una clase persistente.  Se añaden restricciones o condiciones para filtrar la consulta.
  • 109. Hibernate Herencia  Estrategias de mapeo: • Una tabla por jerarquía • Una tabla por cada subclase • Una tabla por cada clase concreta  Una tabla por jerarquía: • Requiere un discriminador • Las columnas declaradas en subclases no pueden ser “NOT NULL” • La mayoría de la información → en la padre.
  • 111. Hibernate Herencia  Una tabla por cada subclase: • Requiere tantas tablas como clases existan • Las tablas “hijas” tienen claves foráneas a la tabla que representa el “padre” → Relación one- to-one • Puede implementarse tanto con discriminador como sin él. • Se suele utilizar cuando todas las clases son concretas y la información esta repartida uniformemente.
  • 114. Hibernate Herencia  Una tabla por cada clase concreta: • Requiere tantas tablas como clases concretas existan. • Tiene una limitación → Las propiedades mapeadas en las superclases se tienen que llamar igual en todas las tablas que mapeen las subclases. • La superclase puede ser abstracta o concreta. Si es abstracta se marcará en el fichero de mapeo con abstract=true.
  • 116. Persistencia de datos FIN Iker Canarias iker.canarias@gmail.com