Introducción a los ORM
En este tema vamos a empezar a explicar qué ese un ORM e Hibernate , pero empecemos con los ORM.
Las siglas ORM significan “Object-Relational mapping” 1) y en castellano es “Mapeo Objeto-Relacional”.
El ORM es simplemente el código que escribimos para guardar el valor de nuestras clases en una base de datos relacional. Simplemente éso.
Es decir, es un framework de persistencia de nuestros datos a una base de datos.
Veamos un ejemplo en el que suponemos que estamos desarrollando el programa Itaca para la consellería de educación:
El programa tendrá la clase
Profesor
tal y como vemos en el siguiente diagrama UML:
Pero los objetos de la clase
Profesor
finalmente se deberán guardar en filas de la tabla de la base de datos llamada Profesor
:
El código Java que, dado un objeto
Profesor
, genera una fila en la tabla Profesor
o la borra o la actualiza, etc, es un ORM. Así de sencillo.
Ahora te estarás preguntando, ¿y para éso necesito un curso entero del? ¡Si yo llevo años haciendo eso con JDBC!.
Si pero:
Si pero:
- ¿Cuántas veces has llamado a
setString(int parameterIndex,String x)
para pasar los datos a unjava.sql.PreparedStatement
y poder almacenarlos en la base de datos?
Demasiadas veces y ¡ estoy harto de hacerlo!.
- ¿Y qué hay del código de JDBC cuando la clase
Profesor
incluye unjava.util.Set
o unjava.util.List
o simplemente herencia de otras clases.?
- Ese código no debe tocarse mientras no se deje la empresa ya que se corre el peligro de que nada vuelva a funcionar.
- ¿Y de hacer las validaciones antes de guardarlo?¿No estas harto de comprobar que la propiedad
nombre
no está vacía?
- La próxima vez que compruebe que un String no es
null
y que tras hacer untrim()
aún quedan caracteres me rapo el pelo y me hago budista.
- ¿Recuerdas el día en el que el DBA 2) te pidió que cambiaras el nombre de varias columnas de la base de datos?
- Estuve semanas revisando el código para estar seguro de que no me había dejado ninguna línea sin cambiar. Al volver a casa mi hijo ya no me conocía.
Dejando a parte esta pequeña broma, usar JDBC directamente tiene muchos problemas. Lo normal es que para evitar toda esta repetición de código los programadores empecemos a hacernos nuestras utilidades que nos ahorran mucho esfuerzo. Estas utilidades son el principio de un ORM. Gavin King pensó lo mismo 3) y acabó haciendo Hibernate.
Es decir que Hibernate es simplemente una serie de clases Java 4) que nos ayudaran a insertar, leer, actualizar borrar nuestros objetos en la base de datos.
Hibernate
¿Cuál ha sido el éxito de Hibernate? Mi opinión es la siguiente:
- No depende de estándares, lo que hace que pueda añadir funcionalidades mas rápidamente.
- Al igual que JDO no es necesario implementar interfaces o heredar de clases.
- Realiza sólo una cosa y la hace bien: Sólo se puede persistir a bases de datos relacionales, a diferencia de JDO que permite otros tipo de repositorios.
Hibernate
Después de dar un repaso a todas las tecnologías de persistencia, ¿Por qué un curso de Hibernate en vez de un curso de JPA? Realmente este curso trata de Hibernate e Hibernate con JPA con lo que vamos a tener lo mejor de ambos mundos.
Para hacer la persistencia de nuestros objetos Java a la base de datos hay que indicar cómo se debe realizar dicha persistencia. Para ello hay dos métodos:
- Ficheros XML
- Anotaciones en el código.
Las anotaciones que tiene Hibernate son actualmente las del estándar de JPA. De esa forma al ver las anotaciones de hibernate estaremos viendo las de JPA.Cuando veamos los ficheros XML usaremos los ficheros propietarios de Hibernate, así también veremos cómo funciona realmente Hibernate.
En cuanto al API de Java , vamos a ver únicamente el API de Hibernate.
¿Y por qué no dar sólo JPA sobre Hibernate ?
JPA sigue siendo un estándar de JCP , lo que conlleva un proceso lento de nuevas versiones y funcionalidades. Usando Hibernate directamente tendremos acceso a las funcionalidades específicas de Hibernate que no están cubiertas en el estándar de JPA y tampoco hay que ser tan estricto.
JPA sigue siendo un estándar de JCP , lo que conlleva un proceso lento de nuevas versiones y funcionalidades. Usando Hibernate directamente tendremos acceso a las funcionalidades específicas de Hibernate que no están cubiertas en el estándar de JPA y tampoco hay que ser tan estricto.
Hibernate ha funcionado con éxito muchos años en Java sin necesidad de JPA, así que no vamos a perder ahora todas las ventajas de ofrece Hibernate frente a JPA.
Resumiendo , éste va a ser un curso de Hibernate en el que muchas de las cosas que expliquemos será usando el estándar de JPA.
No hay comentarios:
Publicar un comentario