M4-UF1 FRAMEWORK SPRING

UNIDAD 9: Integración de Spring con Hibernate

eugeniaperez.es

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.1 La capa de persistencia

Spring MVC tiene como una de sus prioridades la fácil integración con librerías externas.

Para la capa de persistencia hemos visto cómo utilizar JDBC. No obstante, hoy en día la utilización de ORMs es un patrón común por sus múltiples ventajas.

Introduciremos una nueva implementación del UserDAO mediante Hibernate (no debería ser necesario modificar otras partes de la aplicación...)

 

 

unidad 9: integración con hibernate

 

eugeniaperez.es

Descarga el código en Bitbucket

 

Descarga el proyecto spring.hibernate del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.hibernate.git

 

 

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.1 La capa de persistencia

Entre otras dependencias añadimos:

  • spring-jdbc
  • spring-orm
  • spring-tx
  • mysql-connector-java
  • hibernate-core

En mvc-config o servlet-context cambia el contexto base a aquel que reúna todas las clases que vaya anotadas:

 

 

<context:component-scan base-package="org.sistema.springmvc" />

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.1 La capa de persistencia

En el root-context o bien en el application-config (en función de cómo hayas creado tu proyecto MVC...) indicamos que las transacciones van anotadas:

 

También incluiremos:

  • El datasource para conexión a BD
  • El sessionFactory con propiedades de Hbm:
    • Ficheros anotados: annotatedClasses
    • Ficheros de mapeo XML: mappingResources

 

 

<tx:annotation-driven transaction-manager="transactionManager" />

Va inyectada en el DAO

¡¡Incluye el espacio de nombres tx!!

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.1 La capa de persistencia

En el root-context o bien en el application-config...

  • Incluye también el bean de transactionManager
  • Y no te olvides de inyectar los DAOs que utilices, con el sessionFactory

 

 

 

 

<bean id="transactionManager"
	class="org.springframework.orm.hibernate4.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="userDAO" class="org.sistema.springmvc.dao.impl.HibernateUserDAO">
	<property name="sessionFactory" ref="sessionFactory" />
</bean>

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.1 La capa de persistencia

El Framework de Spring permite gestionar las operaciones bajo transacciones de manera automática.

Marcaremos todos los métodos que realizan operaciones contra BD como @Transactional y aquéllos que SOLO hagan lecturas como @Transactional(readOnly = true).

El DAO obtendrá cada Session de Hbn a través de la SessionFactory, que le inyectaremos desde el root-context.

 

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.1 La capa de persistencia

Finalmente incluye las anotaciones necesarias para que Hbn interprete los POJOs del proyecto como entidades a transformar en tablas en la BD (@Entity, @Id, etc)

O bien incluye tus ficheros XML de mapeo...

Como puedes ver no hemos tenido que hacer ninguna modificación en vistas/controladores gracias a...

¡¡Un buen diseño, programar contra interfaces e inyección de dependencias!!

Recuerda crear la BD usersapp

UNIDAD 9: INTEGRACIÓN CON HIBERNATE

 

eugeniaperez.es

9.2 Interoperabilidad con distintos SGBD

Una de las principales características de Hibernate como ORM es la independencia para utilizar distintos SGBD.

Para que la aplicación anterior funcione con HSQLDB en lugar de MySQL:

  • Incluiremos el datasource con los parámetros para hsqldb
  • Modificamos el dialecto: HSQLDialect
  • Incluimos la dependencia org.hsqldb en el pom

unidad 9: integración con hibernate

 

eugeniaperez.es

Descarga el código en Bitbucket

 

Descarga el proyecto spring.hibernatev2​ del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.hibernatev2.git

 

 

UNIDAD 9: Integración con hibernate

 

eugeniaperez.es

9.1 La capa de persistencia (II)

El proyecto anterior integra la versión 6 de Spring forms, es decir, User-> Tasks (1:N) con Hibernate.

Para agilizar el proceso, carga el script hibernatemvc.sql con la BD que crearás: hibernateMVC

Para lo anterior se ha hecho uso del GenericDAO, y de un DAO específico, preparado para hacer una búsqueda por nombre (futura ampliación...)

 

 

 

UNIDAD 9: Integración con hibernate

 

eugeniaperez.es

9.1 La capa de persistencia (II)

Por lo tanto se introducen:

  • 2 objetos del modelo de dominio anotados
  • 2 controladores
  • 1 GenericDAO que servirá para operaciones CRUD típicas sobre objetos concretos. Se utiliza desde el controlador y se inyecta en el root-context.xml:

 

 

 

@Autowired
private GenericDAO<Task> taskDAO;
<bean id="taskDAO" class="org.sistema.springmvc.forms.dao.GenericDAO">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

UNIDAD 9: Integración con hibernate

 

eugeniaperez.es

9.1 La capa de persistencia (II)

Por lo tanto se introducen:

  • Se crea un UserDAO con una operación específica de selectByName para una posible ampliación.
  • En este caso se referencia el objeto concreto:

 

 

 

<bean id="userDAO" class="org.sistema.springmvc.forms.dao.UserDAO">
     <property name="sessionFactory" ref="sessionFactory" />
</bean>
@Autowired
private UserDAO userDAO;
Made with Slides.com