jueves, 21 de febrero de 2008

Hibernate

Hoy en dia las base de datos más frecuentes son las base de datos relacionales,que se basan en las relaciones entre las entidades.
Este framework nos permite el mapeo de atributos entre clases y bases de datos a través de XML.
Con ello conseguimos un código más limpio al no tener que utilizar sentencias sql.
Por ejemplo:
Tenemos una clase
public class Libro{

private String nombre;
private String foto;
private Double precio;
private Long id;

public Long getId()
{
return id;
}

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

public String getNombre()
{
return nombre;
}

public void setNombre(String nombre)
{
this.nombre = nombre;
}

public Double getPrecio()
{
return precio;
}
public void setPrecio(Double precio)
{
this.precio= precio;
}
public String getFot()
{
return foto;
}

public void setFoto(String foto)
{
this.foto= foto;
}

}

Para que el hibernate reconozca este objeto tenemos que hacer el mapeo de esta clase
creandonos un archivo llamado Cliente.hbm.xml para que nos cree la relacion entre objeto y tabla

Luego para configurar la conexion que va a usar hibernate utilizamos el archivo hibernate.cfg.xml(esta es la forma más sencilla se pueden hacer de otras o eso es lo que he leido por ahi)


Vamos hacer una prueba para ver como funciona esto:
package es.cea.juego;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import es.cea.juego.util.HibernateUtil;

public class JugadorTest {
SessionFactory sessionFactory;
@BeforeClass
public void iniciarFactoria(){
sessionFactory = HibernateUtil.getSessionFactory();
}

@Test
public void pruebaArranqueHibernate(){
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Cliente cliente=new Cliente();
cliente.setNombre("noelia");

Session sesion = sessionFactory.getCurrentSession();

sesion.beginTransaction();

sesion.save(cliente);

sesion.getTransaction().commit();
}

}

Todo el codigo que hayy entre sesion.beginTransaction() y sesion.getTransaction().commit(); lo ejecuta el hibernate.

Al hacer esto se crea un cliente en nuestra base de datos.

Si queremos obtener de la base de datos un dato en cocrerto se hace:

Cliente cliente1= (Cliente) sesion.get(Cliente.class,1);

Con esto le estas diciendo al hibernate que saque los datos de la tabla cliente con id=1

Vamos a ver las distintas formas que se pueden utilizar para hacer consultas con hibernate:
  • Criteria y SimpleExpression
Session session = sessionFactory.getCurrentSession();

Criteria criteria = session.createCriteria(Cliente.class);

SimpleExpression expression=Expression.eq("nombre", "noelia");

criteria.add(expression);
Cliente noelia=(Cliente) criteria.uniqueResult();

Con esto le decimos al hibernate exctamente lo que querems buscar con que condiciones,aqui por ejemplo el nombre que sea noelia,solo nos saca uno puesto que le hemos puesto la condicion de uniqueResult();
  • Example--> este nos permite crear búsquedas a partir de una instancia dada.
Session session = sessionFactory.getCurrentSession();

Cliente cliente = new Cliente();
cliente.setNombre("noelia");

List results = session.createCriteria(Cliente.class)
.add( Example.create(cliente) )
.list();