Primeros pasos con Hibernate

Descargar Hibernate

Lo primero es lo primero, descargar la aplicación:

Hola Mundo

Vamos a seguir el turorial que viene con hibernate, por lo que puedes considerar esto como un resumen adaptado.

¿Que necesito?

Es una buena pregunta porque dado que hibernate es un motor de persistencia el hola mundo es un poco complicado.

Necesitas:

  • Apache Ant : Una utilidad para compilar, comprobar y ejecutar código.
  • HSQLDB : Un motor Java de bases de datos que se ejecuta y reside en memoria. Útil para hacer tests.
    • Debianitas y familiares : apt-get install hsqldb-server (aunque yo lo he bajado de su web como el resto de mortales))
    • Resto de mortales : http://hsqldb.org
  • Hibernate: Por enumerar todos los paquetes que necesitas.

… Ya lo tienes todo.

Colocar las cosas en su sitio

Lo primero que vamos a hacer es ubicar cada cosa en su sitio. Vamos a crear un directorio raíz de nuestro proyecto. y a continuación crearemos:

  • src : Para el código fuente de nuestras clases.
  • lib : Para las librerías que vayamos poniendo.
  • data: Para que HSQLDB deje sus archivos de base de datos. Este directorio es el directorio de trabajo de HSQLDB.

Pondremos en lib los jar que te has bajado de sus respectivos sitios:

  • hibernate3.jar
  • hsqldb.jar

por lo que nos quedará un arblo de directorios tal que así:

.
+lib
  hibernate3.jar
  hsqldb.jar
+src

+data

La clase a mapear

Como hemos dicho Hibernate es un motor de persistencia. Por lo que se encarga de replicar en base de datos nuestros DTO's.

Vamos a usar la clase que nos proponen en el tutorial de hibernate y vamos a suponer que queremos guardar en base de datos algo tal que así:

package org.hibernate.tutorial.domain;

import java.util.Date;

public class Event {
    private Long id;

    private String title;
    private Date date;

    public Event() {}

    public Long getId() {
        return id;
    }

    private void setId(Long id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

El Mapeo

Una vez tenemos la clase a mapear debemos decirle a Hibernate a donde van los datos de nuestra clase. Hibernate necesita saber como y de donde recuperar y guardar los datos de nuestra clase. Esto se hace mediante el XML de Mapeo que suele llamarse como la clase que mapea + hbn.xml por lo que en nuestro ejemplo se llamará Event.hbm.xml.

En este XML lo que haremos será decirle en que tabla y en que columna se guarda cada miembro ( valor)

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- NOMBRE DEL DOCUMENTO :  Event.hbn.xml -->
<hibernate-mapping>

    <class name="events.Event" table="EVENTS">  <!-- La clase events.Event va a la tabla EVENTS -->
        <id name="id" column="EVENT_ID">        <!-- El nombre del id es id  y va en la columna EVENT_ID -->
            <generator class="native"/>         <!-- El generador es el nativo de la base de datos -->
        </id>
        <property name="date" type="timestamp" column="EVENT_DATE"/>   <!-- el atributo date es del tipo timestamp y va a la columna EVENT_DATE -->
        <property name="title"/>                <!-- El stributo title lo vamos a guardar en una columna con el mismo nombre title -->
    </class>


</hibernate-mapping>

No hay que ser muy listo para ver que:

  • class sirve para indicarle el contenido de nuestra clase a guardar y donde guardarlo.
  • id sirve para especificar el comportamiento de la clave primaria.
    • name sirve para indicarle el nombre de la propiedad de nuestra clase Java. Ten en cuenta que Hibernate usará los getters y setters para acceder a ella (getCosa(), setCosa()).
  • property sirve para indicarle el comportamiento de cada propiedad a guardar.
    • type sirve para indicarle el tipo de dato a usar en la base de datos (queremos que use un timestamp).
    • column sirve para indicarle la columna de destino.
  • Por defecto Hibernate usa el nombre de la clase para el nombre de la columna por eso la propiedad title no tiene el atributo column. En el caso de date es necesario porque date es una palabra reservada y el nombre de la columna es distinto al de la propiedad. Pero en el caso de title el nombre de la columna en la base de datos es el mismo y del mismo tipo. Por lo que es lo que ya presupone hibernate.

por lo que ya tenemos un arbol de directorios tal que así:

.
+lib
  hibernate3.jar
  hsqldb.jar
+src
  +events
    Event.java
    Event.hbm.xml
+data

La Configuración de Hibernate

Llegados a este punto ya sólo nos queda configurar hibernate. Decirle que base de datos vamos a usar, donde está, etc. Eso se puede hacer mediante un simple .properties o mediante un XML. Como que XML mola mas lo vamos a hacer con XML. De este modo crearemos hibernate.cfg.xml en la raíz de nuestro proyecto.

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- NOMBRE DEL DOCUMENTO : hibernate.cfg.xml -->
<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

        <!- Documento de mapeo de clases -->
        <mapping resource="events/Event.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

Recuerda que Hibernate es nuestro motor de persistencia. Las conexiones las haremos mediante JDBC. En este ejemplo para simplificar las cosas estamos usando hsqldb y el JDBC interno de hibernate. Recuerda que si usas ySql, Oracle, etc deberás incluir el jar pertinente del JDBC en el directorio lib de tu proyecto.

ANTear

Bueno, no es el objetivo de este tutorial explicarte que es, para que sirve y lo que se puede hacer con ANT. Eso ya te lo dichen los amigos de ant.apache.org y yo tambien tengo un mimi-recordatorio

Por lo que simplemente copia exte build.xml en la raíz de tu proyecto

<!-- nombre del archivo : build.xml -->
<project name="hibernate-tutorial" default="compile">

    <property name="sourcedir" value="${basedir}/src"/>
    <property name="targetdir" value="${basedir}/bin"/>
    <property name="librarydir" value="${basedir}/lib"/>

    <path id="libraries">
        <fileset dir="${librarydir}">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="clean">
        <delete dir="${targetdir}"/>
        <mkdir dir="${targetdir}"/>
    </target>

    <target name="compile" depends="clean, copy-resources">
      <javac srcdir="${sourcedir}"
             destdir="${targetdir}"
             classpathref="libraries"/>
    </target>

    <target name="copy-resources">
        <copy todir="${targetdir}">
            <fileset dir="${sourcedir}">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>
</project>

por lo que ya tenemos un arbol de directorios tal que así:

.
build.xml
+lib
  hibernate3.jar
  hsqldb.jar
+src
  hibernate.cfg.xml
  +events
    Event.java
    Event.hbm.xml
+data

Ahora tan sólo hay que probar a ejecutar:

juantxu@apolonia:~/java/hibernateTest$ ant
Buildfile: build.xml

clean:
   [delete] Deleting directory /home/juantxu/java/hibernateTest/bin
    [mkdir] Created dir: /home/juantxu/java/hibernateTest/bin

copy-resources:
     [copy] Copying 2 files to /home/juantxu/java/hibernateTest/bin

compile:
    [javac] Compiling 1 source file to /home/juantxu/java/hibernateTest/bin

BUILD SUCCESSFUL
Total time: 3 seconds
 
hibernate/1.txt · Última modificación: 2008/10/09 08:00 por juantxu
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki