Está en la página 1de 4

Hibernate con Maven Agrego en el pom.

xml:
<!-- Dependencias de Hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.4.GA</version> <scope>compile</scope> </dependency>

Hago un mvn eclipse:eclipse y agrego M2_REPO al build path del proyecto. Si creo la clase Alumno:
public class Alumno { private int padron; private String apellido; private String nombre; public int getPadron() { return padron; } public void setPadron(int padron) { this.padron = padron; } public String getApellido() { return apellido; } public void setApellido(String apellido) { this.apellido = apellido; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } }

Este sera su respectivo archivo mapeador: Alumno.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ejemplo.hibernate.Alumno" table="Alumno"> <id name="padron" column="padron"> <generator class="native"></generator> </id> <property name="apellido" column="apellido"/> <property name="nombre" column="nombre"></property> </class> </hibernate-mapping>

NOTAR QUE LA TABLA DE LA BASE DE DATOS SE LLAMA IGUAL QUE LA CLASE, Y EST INDICADO EN EL ATRIBUTO table DEL TAG <class> DEL ARCHIVO MAPEADOR. Algunas consideraciones: En el atributo name se indica el nombre del atributo de la clase de java que va a mapear a la columna padron, indicado como column. <generator class="native">: Indica cul va a ser la estrategia de generacin del identificador padron. El valor native indica que se elige la mejor estrategia, dependiendo de la configuracin de la base de datos.
<id name="padron" column="padron">:

El archivo de configuracin de Hibernate es: hibernate.cfg.xml


<?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"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/base</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</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/> <!-- 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> --> <mapping resource="Alumno.hbm.xml" /> </session-factory> </hibernate-configuration>

En el tag <mapping-resource> se indican los archivos hbm.xml que mapean las clases con cada tabla (ver si es necesario poner los paquetes). Para empezar se necesita crear una Session. Para eso es necesario indicar mediante cdigo cul es el archivo de configuracin de Hibernate. Por lo general se tiene una clase HibernateUtils, la cual contiene un atributo esttico de tipo SessionFactory y que se inicializa de este modo:
sessionFactory = new Configuration().configure( new File("hibernate.cfg.xml")).buildSessionFactory();

Luego, mediante un mtodo esttico se devuelve esta sesin (getSessionFactory()). Para crear efectivamente una sesin se invoca al mtodo getSessionFactory(), el cual devuelve una SessionFactory, y a este objeto se le aplica el mtodo getCurrentSession(). Esto me devuelve un objeto de tipo Session que es lo que se va a usar para interactuar con la base de datos. Finalmente, se invoca el mtodo beginTransaction() de Session. Ya est todo listo. Ejemplo:
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction();

Estas dos lneas de cdigo se usan siempre que se desee interactuar con la base de datos, ya que es la forma de inicializar el objeto de tipo Session. Para insertar en una tabla de la base de datos: Ejemplo: Existe una tabla llamada Alumno en la base. Tambin existe el POJO Alumno junto a su correspondiente mapeador Alumno.hbm.xml. Se crea un objeto de tipo Alumno y se setean sus atributos:
Alumno alumno = new Alumno(); alumno.setApellido(apellido); alumno.setNombre(nombre);

Luego, utilizando el objeto session, se aplica el mtodo save() pasando al objeto "alumno" como parmetro. Finalmente, se commitea la transaccin:
session.save(alumno); session.getTransaction().commit();

Para listar los registros de una tabla de la base de datos: Ejemplo: Existe una tabla llamada Alumno en la base. Tambin existe el POJO Alumno junto a su correspondiente mapeador Alumno.hbm.xml.
List<Alumno> resultados = (List<Alumno>)session.createQuery( "from Alumno").list(); session.getTransaction().commit();

Es necesario especificar el nombre de la tabla de la base en el mtodo createQuery(). El nombre de la tabla es case-sensitive. Archivos mapeadores de clases java
<property name="apellido" column="apellido"/> <property name="nombre" column="nombre"></property>

La primera property (apellido) indica el nombre del atributo en la clase java. En column se especifica el nombre de la columna correspondiente en la tabla de la base de datos. Si no se coloca el atributo column es porque el nombre de la columna coincide con el nombre del atributo, es decir, de la property. Tambin se puede indicar un type. Estos indican los tipos de mapeo de Hibernate y sirven para convertir el tipo java al tipo sql del elemento a mapear. Muchos tipos son automticos al mapear (se usa reflection), pero por ejemplo, en el caso de un tipo fecha, Hibernate no puede detectar si se trata de un Date, Timestamp o Time, por lo que es necesario indicar el type.