Mi primer CRUD con Hibernate

Vamos a realizar un pequeño CRUD utilizando Hibernate partiendo de la BD que hicimos en el tema de configuración. Como hemos podido observar el Framework nos ha realizado las clases principales del modelo.

 

Ahora siguiendo los patrones aprendidos (MVC-DAO-SINGLETON) vamos a crear las clases conectoras y generar los métodos básicos para la gestión de un CRUD de nuestros refrescos. Veamos nuestro diagrama de clases y planteamos nuestros DAO, en un principio pondremos un insertar, update, delete y un obtener por id ademas de la lista completa de objetos.

 

 

Para entender mejor la codificación vamos a realizarla inicialmente de una sola clase, la de Refrescos y generar su Clase Dao con los métodos de Hibernate.

La base de datos ya la tenemos creada y conectada del paso anterior así como la clase del modelo, repasemos la estructura de nuestro proyecto.

Podemos ver claramente como tenemos dos paquetes que pertenecen al Modelo (MVC), las propias clases que definen los datos (modelo) y hemos creado otro llamado (dao) para las clases conectoras.

Aplicando el patron Singleton que vimos en unidades anteriores hemos creado una clase Conexion.java estática para poder conectarnos desde cualquier parte del programa.

Vemos que el código es bastante simple aunque mas abstracto que el caso de usar directamente JDBC como en la unidad anterior. creando un objeto Configuration de Hibernate y haciendo referencia al archivo de xml de configuración es suficiente.

El siguiente paso es insertar los métodos CRUD de nuestra clase Dao, empecemos por el insertar.

 

Clase Dao (insertar)

En en método vemos cómo creamos el objeto de la sesión y llamamos al metodo save(r) que es el encargado de hacer la inserción en la base datos. Es importante señalar que el metodo que realiza la ejecución es el comit de la transaction (tx.commit()).

Los métodos de update y delete son muy similares, dado que no recibimos nada (se esta omitiendo cualquier tipo de control de errores).

Clase Dao (update)

Clase Dao (delete)

Para la obtención de resultados es igualmente simple. Para obtener un solo resultado utilizaremos el metodo get, indicando la clase y el identificador del elemento que queremos recuperar.

Clase Dao (obtener por id)

Este método ya nos retorno un objeto tipo Refresco con el que podemos trabajar.

Clase Dao (obtener todos)

Clase Dao (Búsqueda)

Podemos observar que es similar al método que usamos para listar todo, pero en este caso utilizamos la creación de una query donde le indicamos lo que debe buscar mediante un parametro, con setParameter().

 

Y en en el modelo ya solo tenemos que llamar al método correspondiente del Dao.

Clase Refresco

 

Mapeo

En Hibernate tenemos dos formas de realizar el mapeo para que relacione los campos de las tablas con los atributos de los objetos.

Ya hemos visto en la lección anterior como la utilidad de Code Generation de hibernate nos crea las clase y los archivos xml de cada una de las clases.

Con anotaciones

Otra forma de indicar a Hibernata que es cada cosa, es por medio de anotaciones, tanto a los atributos como a la clase.

Las anotaciones básicas que debemos de añadir son:

@Entity: Indica que la clase es una Entidad (que tiene una tabla asociada)
@Table(name=»tabla»):  Indica el nombre de la tabla asociada.
@Id: Identifica el atributo como PK.
@Column(name=»campo»):  Asocia cada atributo con el nombre del campo, si como en este caso es el mismo, bastaría con poner @Column sin ningun parametro.

 

Probamos que todo funciona, en este caso en el controlador haremos un objeto y probamos la inserción.


NOTA:

Con el XML 

Es posible que necesitemos modificar el archivo de configuración (hibernate.cfg.xml) mapeando las clases, este método aunque sigue siendo funcional esta desaprobado en favor de las anotaciones del ejemplo anterior. De esta forma:

Podemos ver como le hemos añadido las etiquetas mapping indicando donde se encuentran los archivos xml de cada clase.


Las clases de mi aplicación

 

Clase Main

Podemos comprobar como realiza la inserción en la tabla.

 

A continuación tienes el código de las clases de el CRUD completo.

Clase Refresco

Clase conexión

Clase DaoRefresco

Y ahora la clase main donde probamos los diferentes métodos comentando lo que no queremos que se ejecute en cada momento.

 

¡Y Listo!