Professional Documents
Culture Documents
En este post voy a hacer una introduccin a Hibernate. Tan slo un Hola Mundo para que se
entiendan los conceptos principales. Luego ms adelante har otras entradas para profundizar un
poco ms sobre este framework.
Hibernate.
Hibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java (y
disponible tambin para .Net con el nombre de NHibernate) que facilita el mapeo de atributos entre
una base de datos relacional tradicional y el modelo de objetos de una aplicacin, mediante
archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer
estas relaciones. Hibernate es software libre, distribuido bajo los trminos de la licencia GNU
LGPL. - Wikipedia.
Hibernate es un framework que agiliza la relacin entre la aplicacin y la base de datos. De todos
los frameworks ORM que he utilizado, sin dudas es el ms completo.
Para aprender Hibernte es necesario tener los conocimientos mnimos de SQL y Java. Conocer
JDBC es recomendable. Se puede bajar (en principio con bajar Hibernate Core alcanza)
de www.hibernate.org
Configuracin.
Vamos a hacer un paso a paso para dejar todo listo. Primero vamos a colocar los jars en el
proyecto. Aqui van los de hibernate (que vienen en la carpeta lib de la distribucin), ms el del
driver correspondiente a la base de datos que esten utilizando. Yo voy a utilizar DB2. A continuaci
voy a colocar los jars necesarios. He colocado los de Hibernate + DB2 + MySQL por si alguno la
usa.
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
public abstract class SessionManager {
public static Session getSession() throws HibernateException{
// Instancia un objeto del tipo Configuration
Configuration config = new Configuration();
// Registra las clases a mapear en la configuracion
registerMappers(config);
// Establece las propiedades de configuracion
config.setProperties(getHibernateProperties() );
// Retorna una sesion de trabajo
return config.buildSessionFactory().openSession();
}
private static Properties getHibernateProperties(){
// Instancia un objeto del tipo Properties.
Properties props = new Properties();
// Establece el driver de conexion dependiente del RDBMS.
//para MySQL seria: props.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
props.put("hibernate.connection.driver_class", "com.ibm.db2.jcc.DB2Driver");
// Establece la url de conexion, donde al final va el nombre de la BD
//para MySQL props.put("hibernate.connection.url", "jdbc:mysql://localhost/testHibernate");
props.put("hibernate.connection.url", "jdbc:db2://localhost:50000/sample");
// Establece el usuario.
props.put("hibernate.connection.username", "db2admin");
// Establece la clave.
props.put("hibernate.connection.password", "db2admin");
// Establece el dialecto a utilizar. Es necesario determinarlo ya que la implementacin
// de SQL puede variar con cada motor de base de datos.
// Para MySQL sera: props.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
props.put("hibernate.dialect", "org.hibernate.dialect.DB2Dialect");
// Retorna las propiedades
return props;
}
// Cada clase mapeada deber aparecer aca.
private static void registerMappers(Configuration config) throws MappingException
{
config.addResource("negocio/Auto.hbm.xml");
}
}
Como vern, he configurado el SessionManager de manera programtica. Obviamente lo ideal
Y, ahora veremos el archivo auto.hbm.xml. La extensin hbm.xml es por convecin. Este archivo
representa la forma de relacionar una clase con una tabla. Existir un hbm.xml por cada clase que
desee mapear. Por lo general, se acostumbra dejar el archivo xml en el mismo paquete de la clase
mapeada.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="negocio.Auto" table="autos">
<id name="id" column="idauto">
<generator class="increment" />
</id>
<property name="marca" />
<property name="modelo" />
</class>
</hibernate-mapping>
Listo, ya tenemos todo para realizar las primeras pruebas. Pero antes voy a explicar que es cada
cosa en el xml:
1.
hibernate-mapping es la raz del documento y, por ende, todos los tags quedan
contenidos dentro de este tag.
2.
El tag class es general: nombra la clase y la tabla.
3.
El tag id representa el atributo que se relaciona con la clave primaria. Su
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.
4.
El tag property es utilizado para los atributos que no son clave primaria. Sus atributos ms
importantes son name y column. Si el nombre del atributo coincide con la columna, no es
necesario especificar a ambos. Con especificar name es suficiente.
5.
El tag generator esta contenido dentro de id y representa la forma de generar la clase
primaria al insertar un nuevo registro. Puede tomar diversos valores pero los ms comunes son:
assign: para los casos donde la BD no gener la clave primaria, sino que el objeto es quin
la determina.
A probar!
Hemos insertado un auto. Tan sencillo como eso, ejecutar el mtodo save.
Hibernate elimina por id de manera automtica. Por ello, con solo colocarle el id al objeto
auto es suficiente. Para eliminaciones ms complejas hay que tirar un poco ms de cdigo.
Bien, hasta aqu llego nuestro pequeo ejemplo. Cuando tenga un poco ms de tiempo voy a
profundizar sobre este framework.