miércoles, 8 de febrero de 2012

MODULO DE HIBERNATE


Hibernate es un framework que implementa al estándar JPA.

Conceptos a tener en cuenta:
*SessionFactory:es aquella que se encarga de decir al sistema, donde se encuentran todos los ficheros de mapeo de Hibernate, el dialecto de Hibernate a utilizar (varía según el gestor de base de datos, pero no para nosotros, sino para el sistema, nosotros siempre utilizamos HQL:CRITERIA), y también va a ser la encargada de asociar los DAO 

* Session:Session ofrece métodos como save(Object object), createQuery(String queryString), beginTransaction(), close(), etc. para interactuar con la BD

*Transaction: Lo asociamos a una transacción, "habla" con la BD y decide que acciones se tienen que cumplir.Por ejemplo:"Commit","Rollback"...


Crear un proyecto con Hibernate:

1)Descargar el plugin:
En Eclipse->Help/Install New Software
http://download/jboss.org/jbosstools/updates/indigo
Señalar todo lo que contenga Hibernate.

2)Hacer un nuevo proyecto Java o Dinamic Web.

3)Configuración del plugin:
Pulsar sobre el proyecto->New/Other/
*Create Configuration File:
Mirar que este  en opción:Core
*Create Hibernate Console Configuration:
Mirar  que la ruta y el nombre son correctos del "cfg.xml"
Luego comprobar el código generado:


<hibernate-configuration>

<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/twitter</property>
<property name="hibernate.connection.username">root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's current session context -->
<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 -->
 <mapping resource="es/cea/negocio/Usuarios.hbm.xml"/>
<mapping resource="es/cea/negocio/Mensajes.hbm.xml"/>
<mapping resource="es/cea/negocio/Seguidores.hbm.xml"/>
</session-factory>  </hibernate-configuration>



*Create Reverse:
-Main: Seleccionamos el directorio de consola.
-Se pone la base de datos que queremos conectar e incluimos las tablas.
-Crear "reveng.xml"
*Generamos el codigo en:


 Run –> Hibernate Code Generation –> Hibernate Code Generation.
  • Exporters: 
    • Domain Code
    • Hibernate XML mappings: Creamos el "hbm.xml"
    • DAO code
    • Hibernate XML configuration


4)Crear una clase dentro de un paquete aparte que es la que se encarga de llamar al objeto SessionFactory cuando nos haga falta desde las demás clases.
  
import org.hibernate.*;
public class UtilHibernate {
public static SessionFactory getSessionFactory(){
try{
return new Configuration().configure("hibernate.cfg.xml").builSessionFactory();
}catch (Exception e){
trows new IllegalStateException("Could not locate SessionFactory in JNDI");
}}}




5)Las clases que se crean para cada tabla deben estar en el mismo paquete que los "hbm.xml" de cada una, estas clases son las que tienen que implementar los metodos que haran las acciones pertinentes en la BD, en cada "hbm.xml" de cada una habrá tb que hacer el mapeo necesario.


*Cosas a tener en cuenta en el mapeo:
-Poner las columnas de la tabla con el mismo nombre y teniendo en cuenta mayusculas y minusculas.
-En la etiqueta: <generator class:"identity".
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 08-feb-2012 14:45:52 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="hb.Usuario" table="usuario" catalog="hibernate">
        <id name="id" type="java.lang.Long">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="nombre" type="string">
            <column name="nombre" length="20" />
        </property>
        <property name="password" type="string">
            <column name="password" length="20" />
        </property>
        <set name="mensajeses" table="mensajes" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idusuario" />
            </key>
            <one-to-many class="hb.Mensajes" />
        </set>
    </class>

Librerias que hacen falta(asegurar meterlas todas en WEB-CONTENT/LIB del proyecto):

1)Sino las tenemos las bajamos de: http://sourceforge.net/projects/hibernate/files
Cogemos estos dos:
Distribution-Hibernate 3.3.2 
Annotation-Hibernate 3.6

Luego de estas carpetas cogeremos solo:
-Distribution-Hibernate 3.3.2 /Hibernate3
-Distribution-Hibernate 3.3.2 /lib/Required 
(de esta ultima seleccionamos todo)
-Annotation-Hibernate 3.6/lib/ejb3-persistence
-Annotation-Hibernate 3.6/lib/common-annotation
-Annotation-Hibernate 3.6/lib/test/log4.jar
-Annotation-Hibernate 3.6/lib/test/slf4j-log4j12.jar

No olvidar:
-mysql-connector-java-5.1.6-bin.jar
-jstl.jar
-standar.jar
-log4j.properties (que nos paso Jose)



CRITERIA

Ejemplo de método usado con criteria:

</hibernate-mapping> public static Usuario dameUsuario(long id) {
     Session ses = UtilHibernate.getSessionFactory().openSession();
     Criteria cr = ses.createCriteria(Usuario.class);
     cr.add(Restrictions.idEq(new Long(id)));
     return (Usuario) cr.uniqueResult();
    }










 

















No hay comentarios:

Publicar un comentario