Conociendo una herramienta ORM: Hibernate

Blog Single

Esta semana vuelvo con los ORM, ya hemos descubierto algunas de las ventajasque aporta a nuestros desarrollos, pero ahora vamos a conocer una herramienta concreta y ver algún pequeño ejemplo, en especial vamos a ver un poquito de Hibernate, que es el ORM que empleé durante mi primera experiencia como desarrollador.

hibernate orm

Veamos la definición de la wikipedia:

“Hibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones.”

Como vimos en el artículo anterior se trata de una especie de traductor situado entre nuestra aplicación y la base de datos, que nos abstraerá del diseño de la base de datos, permitiéndonos centrarnos en las funcionalidades básicas de nuestra aplicación.

Como bien dice la señora wikipedia la manera de poder abstraerse de ésta es con un mapeo entre las columnas de una tabla de la base de datos y los atributos de una clase. En este artículo he decidido emplear archivos de configuración xml para realizar el mapeo.

ORM arquitectura

Ejemplo Práctico de Hibernate

El primer paso que debemos realizar es configurar el conector jdbc para que sea empleado por Hibernate. A continuación muestro el fichero de configuración base, donde además de los datos de conexión a la BBDD se deben de establecer ciertos parámetros de configuración para Hibernate, por ejemplo true establece mostrar las traducciones a sql por la salida estandar (en esta introducción no es objetivo conocer todos estos parámetros, ver documentación oficial). Además se incluyen las referencias a los recursos de mapeo correspondientes:

Tras configurar la conexión con la base de datos debemos desarrollar las clase java (modelos) que se asociaran con las tablas de la base de datos. Es importante incluir un constructor vació y los getters y setters de todos los atributos, ya que es necesario para Hibernate para el proceso de Mapeo.

En este ejemplo mapearemos una Relacion de Asociación 1 a N, concretamente la siguiente relación: “un cliente puede llegar a tener N pedidos, mientras que un pedido solo corresponde a un solo cliente”. Como podemos comprobar estas clases implementan la interfaz Serializable, ya que el contenido de los objetos de estas clases se serializarán en la base de datos.

Para completar la relación el Cliente requiere de un medio de almacenamiento de los pedidos, para este mapeo empleamos un ArrayList de Pedidos. A continuación os dejo los beans a ser mapeados:

mapeo arraylist

Tras tener configurada la conexión a la base de datos y nuestros modelos (clases) desarrollados, debemos de preparar los ficheros de mapeo. En los siguientes xml podemos comprobar como los atributos de las clases definidas anteriormente se asocian con las columnas de la base de datos además de definir que tipos de datos se emplean depende del sistema.

Ciertas características interesantes de estos ficheros a comentar son, por ejemplo, la auto-generación de ids, o como se realiza el mapeo de las asociaciones con las claves foráneas y si atributos, por ejemplo, el atributo lazy (conexión perezosa) puesto a false determina que al consultar los clientes deben de recuperarse recursivamente todos los pedidos)

 

En el siguiente artículo veremos como una vez todo configurado, se emplean estos mapeos para realizar consultas en la aplicación abstrayéndose del SGBD y como empleamos el patrón Singleton

 

Nube de Tags

Comparte el artículo si te ha resultado interesante: