You are on page 1of 34

Las aplicaciones analizan, procesan, comparten y gestionan

información que se almacena en Bases de Datos.

BD Relacional BD OO …
APLICACIÓN JAVA

JDBC API
JDBC Driver Manager
JDBC Driver JDBC Driver

ORACLE SQL
SERVER
class Jefe Jefe
extends Empleado
{ VARCHAR2 id
String nombre; VARCHAR2 nombre
ArrayList Empleados; VARCHAR2 id_empleado

}

Objeto DESAJUSTE
Java
Capa de abstracción entre el modelo
de dominio y la BD que realiza la
traducción.
 API de operaciones en objetos persistentes.

 Lenguaje de consulta.

 Facilidad para definir metadatos para el mapping.

 Técnicas de optimización de consultas.

 Estrategias de obtención de datos pertenecientes a


asociaciones (N+1 select).
Un framework de mapeo Objeto-Relacional
(ORM) para Java.

Una implementación del estándar JPA


(Java Persistence API).
APLICACIÓN
Objetos PERSISTENTES

Propiedades
Hibernate HIBERNATE Mapeo XML

ORACLE SQL SERVER


APLICACIÓN
Objetos en memoria
(Transient Objects)
Objetos
PERSISTENTES
Session Factory
Session Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
Objetos
PERSISTENTES
Session Factory
Session Transaction
Hibernate
Transaction soporta multitud de Bases de Datos
Connector
Factory
(ORACLE,Provider
MySQL, SQL Server, …)
JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
Objetos
JDBC (Java DataBase PERSISTENTES
Connectivity)
Session
permite Factory
a Hibernate comunicarse
con la BD subyacente.Session Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
JNI (Java Native Interface)
Objetosproporciona a
PERSISTENTES
Hibernate
Session la capacidad de interactuar con
Factory
programas escritos enSession
otros lenguajes.Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
JTA (Java Transaction API) permite al
Objetos
gestor de transacciones comunicarse
PERSISTENTES
Session Factory con las partes involucradas en entornos
Session
distribuidos Transaction
transaccionales.
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
Objetos en memoria
Encargado de
APLICACIÓN
(Transient Objects) especificar unidades de
trabajo atómicas.
Objetos
PERSISTENTES
Session Factory
Session Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
Representa
(Transient Objects)
una conversación
entre la aplicación y el
Objetos
almacenamiento persistente.
PERSISTENTES
Session Factory
Session Transaction
Transaction Connector
Factory Provider

Mantiene una cache


JDBC JNI de 1º nivel JTA
de objetos persistentes.
BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
Objetos
PERSISTENTES
Session Factory
Session Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
• Caché de mapeos compilados para una sola BD.
• Fábrica APLICACIÓN
Objetosdeen objetos
memoria Session.
• Proveedor de conexiones.
(Transient Objects)
• Opcionalmente cache de 2º nivel de datos reusables.
Objetos
PERSISTENTES
Session Factory
Session Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
Objetos
PERSISTENTES
Session Factory
Session Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
APLICACIÓN
Objetos en memoria
(Transient Objects)
Objetos
PERSISTENTES
Session
ObjetosFactory
que finalmente
se tratan en la Session
aplicación Transaction
Transaction Connector
Factory Provider

JDBC JNI JTA

BASE DE DATOS
 Forma clásica de definición de entidades y relaciones

Clase Java
(fichero .java)

Correspondencia entre
Propiedades y asociaciones del
Objeto/s Java y Entidad/es de
la BD
(fichero XML)
 Forma clásica de definición de entidades y relaciones
Fichero Persona.java
class Persona {
private Float dni;
private String nombre;
private Set<Persona> amigos = new HashSet<Persona>();

public String getNombre();


public void setNombre(String n);

//… Resto de gets/sets (JavaBean)


}
 Forma clásica de definición de entidades y relaciones
Fichero Persona.hbm.xml
 Definición de entidades y relaciones mediante
Annotations.

Clase Java con Annotations


(fichero .java)
 Definición de entidades y relaciones con Annotations
Fichero Persona.java
@Entity (access=AccessType.PROPERTY)
class Persona {
private Float dni;
private String nombre;
private Set<Persona> amigos = new HashSet<Persona>();

@Id (generate=GeneratorType.AUTO)
public Float getDni(){return this.dni};
@Column(name=“nombre",length=50)
public String getNombre(){return this.nombre};

//… Resto de gets/sets (JavaBean)


}
 Persistencia transparente
En Hibernate el mapeo de clases Java a tablas de la BD es
automático.
En JDBC debe hacerse manualmente.

 Lenguaje de consulta propio


Hibernate usa un lenguaje de consulta propio (HQL)
independiente de la BD.
JDBC soporta sólamente SQL nativo.
 Independiente de la BD
En Hibernate Si se modifica la estructura de la BD basta con
editar el archivo XML.
En JDBC hay que modificar el código.

 Mantenimiento reducido
Hibernate ahorra líneas de código, reduciendo el coste de
mantenimiento.
JDBC requiere más mantenimiento.
 Rendimiento optimizado
Hibernate implementa el uso de cachés.
En JDBC se deben implementar manualmente.

 Manejo automático de versiones


Hibernate impide modificar la BD si no se dispone de una
versión actualizada de los datos.
En JDBC se debe implementar esta comprobación
manualmente.
 Fiabilidad y escalabilidad
Hibernate se adapta fácilmente a entornos de trabajo grandes
o pequeños.
Con JDBC es más complicado.
 Curva de aprendizaje lenta.

 Soporte en Internet insuficiente.

 Para mantener una aplicación que use Hibernate se


necesita conocer Hibernate.
 No permite algunas consultas soportadas por JDBC
Por ejemplo no permite insertar múltiples objetos en una tabla
usando una única consulta.

 Demasiada carga para aplicaciones sencillas


Por ejemplo aplicaciones que no modifican la BD o que sólo
introducen datos. En estos casos es mejor usar JDBC.
 Mayor productividad
Se evita mucho código de traducción permitiendo
centrarse en la lógica de negocio.

 Mayor mantenibilidad
Al tener menos líneas el código es más comprensible.
 Mejor rendimiento
Hibernate está optimizado para los diferentes SGBD
que soporta. Al ahorrar tiempo de desarrollo permite
dedicar más tiempo a optimizaciones.

 Independencia del vendedor


Permite desarrollar la aplicación independientemente
del SGBD utilizado.
 Dave Minter Jeff Linwood (2005). Pro Hibernate 3. Apress.
 James Elliot, Timothy M O’Brien, Ryan Fowler (2008).
Harnessing Hibernate. O’Reilly.
 Patrick Peak, Nick Heudecker (2006). Hibernate Quickly.
Manning.
 Christian Bauer, Gaving King (2007). Java Persistence with
Hibernate (revised edition of Hibernate in Action). Manning.

 Artículos O’Reilly
James Elliot (2005). “What is Hibernate”

 Wikipedia
Java Persistence Api (JPA). Hibernate.

You might also like