Introducción a Hibernate En este post voy a hacer una introducción a Hibernate. Tan Tan sólo un Hola Mundo para que se entiendan los conceptos principales. Luego más adelante haré otras entradas para profundiar un poco más sobre este frame!or".
Hibernate. #Hibernate es una herramienta de Mapeo ob$eto%relacional &'(M) &'(M) para la plataforma *ava &y disponible también para .+et con el nombre de +Hibernate) que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de ob$etos de una aplicación, mediante archivos declarativos &-ML) o anotaciones en los beans de las entidades e ntidades que permiten establecer estas relaciones. Hibernate es soft!are libre, distribuido ba$o los términos de la licencia +/ L0L. # % 1i"ipedia. Hibernate es un frame!or" que agilia la relación entre la aplicación y la base de datos. 2e todos los frame!or"s '(M que he utiliado, sin d udas es el más completo. 0ara aprender Hibernte es necesario tener los conocimientos m3nimos de 45L y *ava. 6onocer *276 es recomendable. 4e puede ba$ar &en principio con ba$ar Hibernate 6ore alcana) de !!!.hibernate.org
80or que usar un frame!or" '(M9 6uando uno desarrolla una aplicación se dará cuenta que en la gran mayor3a de los casos todo termina siendo un con$unto de :7Ms &alta, ba$a, modificación de datos) para luego poder consultarlos. 0ara ello se utilia una base de datos, donde e;istirán muchas tareas repetidas< por cada ob$eto que quiero persistir debo crear una clase que me permita insertalo, eliminarlo, modificarlo y consultarlo. 4alvo aquellas consultas fuera de lo com=n, el resto es siempre lo mismo. :qu3 es donde entra a $ugar un rol importante importante un '(M< '(M< con solo configurarlo configurarlo ya tiene todas todas esas tareas repetitivas realiadas y el desarrollador solo tendrá que preocuparse por aquellas consultas fuera de lo normal.
86omo funciona Hibernate9 7ásicamente el desarrollador deberá configurar en un archivo -ML o mediante annotations donde corresponde un atributo de una clase, con una columna de una tabla. Es una tarea relativamente sencilla donde e;isten herramientas que lo hacen por nosotros. En principio voy a realiar los e$emplos con archivos ;ml y luego, en otro post, los haré mediante annotations.
6onfiguración.
>amos a hacer un paso a paso para de$ar todo listo. 0rimero vamos a colocar los $ars en el proyecto. :qui van los de hibernate &que vienen en la carpeta lib de la distribución), más el del driver correspondiente a la base de datos que esten utiliando. ?o voy a utiliar 27@. : continuació voy a colocar los $ars necesarios. He colocado los de Hibernate A 27@ A My45L por si alguno la usa.
Luego vamos a crear una sencilla tabla en la base de datos< 0ara My45L< CREATE TABLE `autos` ( `IDAUTO` int(10) unsigned NOT NULL auto_increent! `"ARCA` #arc$ar(%&&) NOT NULL de'aut ! `"ODELO` #arc$ar(%&&) NOT NULL de'aut ! *RI"AR+ ,E+ (`IDAUTO`) ) 0ara 27@< CREATE TABLE $i-.AUTO/ ( IDAUTO BIINT NOT NULL! "ARCA ARC2AR(%&&)! "ODELO ARC2AR(%&&) )3 CREATE UNI4UE INDE5 /4L11061%06&6%%11%0 ON $i-.AUTO/ (IDAUTO A/C)3 ALTER TABLE $i-.AUTO/ ADD CON/TRAINT /4L11061%606&%61760 *RI"AR+ ,E+ (IDAUTO)3
El siguiente paso es configurar un 4essionManager que me permite obtener sesiones y transacciones para traba$ar con la base de datos. En este caso haremos uno sencillo, que no sirve para traba$ar en producción, pero que nos permite realiar nuestros e$emplos. :ca les de$o la clase, comentada para que se entienda de donde salen todos los datos. pac"age configuracionB import $ava.util.0ropertiesB import org.hibernate.HibernateE;ceptionB
import org.hibernate.MappingE;ceptionB import org.hibernate.4essionB import org.hibernate.cfg.6onfigurationB public abstract class 4essionManager C public static 4ession get4ession&) thro!s HibernateE;ceptionC DD nstancia un ob$eto del tipo 6onfiguration 6onfiguration config F ne! 6onfiguration&)B DD (egistra las clases a mapear en la configuracion registerMappers&config)B
DD Establece las propiedades de configuracion config.set0roperties&getHibernate0roperties&) )B DD (etorna una sesion de traba$o return config.build4essionGactory&).open4ession&)B private static 0roperties getHibernate0roperties&)C DD nstancia un ob$eto del tipo 0roperties. 0roperties props F ne! 0roperties&)B DD Establece el driver de cone;ion dependiente del (27M4. DDpara My45L seria< props.put&Ihibernate.connection.driverJclassI, Icom.mysql.$dbc.2riverI)B props.put&Ihibernate.connection.driverJclassI, Icom.ibm.db@.$cc.27@2riverI)B DD Establece la url de cone;ion, donde al final va el nombre de la 72 DDpara My45L props.put&Ihibernate.connection.urlI, I$dbc
para un proyecto laboral es hacerlo con archivos de configuracion. :ca hay un e$emplo
?, ahora veremos el archivo auto.hbm.;ml. La e;tensión hbm.;ml es por conveción. Este archivo representa la forma de relacionar una clase con una tabla. E;istirá un hbm.;ml por cada clase que desee mapear. 0or lo general, se acostumbra de$ar el archivo ;ml en el mismo paquete de la clase mapeada. N9;ml versionFIO.I9P NQ2'6T?0E hibernate%mapping 0/7L6 I%DDHibernateDHibernate Mapping 2T2DDE+I Ihttp
El tag class es general< nombra la clase y la tabla.
. El tag id representa el atributo que se relaciona con la clave primaria. 4u atributo name hace referencia a como se llama el id en la clase &en nuestro caso da la casualidad que se llama id) y el atributo column representa la columna en la base de datos.
R. El tag property es utiliado para los atributos que no son clave primaria. 4us atributos más importantes son name y column. 4i el nombre del atributo coincide con la columna, no es necesario especificar a ambos. 6on especificar name es suficiente. K. El tag generator esta contenido dentro de id y representa la forma de generar la clase primaria al insertar un nuevo registro. 0uede tomar diversos valores pero los más comunes son< •
increment< para las claves autoincrementales.
•
sequence< para los secuenciadores.
•
assign< para los casos donde la 72 no generá la clave primaria, sino que el ob$eto es quién la determina.
: probarQ
Hemos insertado un auto. Tan sencillo como eso, e$ecutar el método save.
>amos a actualiarlo< ahora lo convertiremos en 6R<
?, por =ltimo, eliminaremos el registro<
•
•
•
:lgunas =ltimas aclaraciones< +o he hecho consultas mediante Hibernate porque habr3a que profundiar un poco más y prefiero de$arlo para más adelante. 0ara actualiar un registro es necesario colocarle el id a la clase. En este caso era un Long, por lo que tuve que hacer setd&OL). Hibernate elimina por id de manera automática. 0or ello, con solo colocarle el id al ob$eto auto es suficiente. 0ara eliminaciones más comple$as hay que tirar un poco más de código. Bien! $asta a8u9 ego nuestro :e8ue;o e a :ro'undi?ar so-re este 'rae@or.