UNIDAD 9: Integración de Spring con Hibernate
eugeniaperez.es
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...)
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
eugeniaperez.es
9.1 La capa de persistencia
Entre otras dependencias añadimos:
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" />
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:
<tx:annotation-driven transaction-manager="transactionManager" />Va inyectada en el DAO
¡¡Incluye el espacio de nombres tx!!
eugeniaperez.es
9.1 La capa de persistencia
En el root-context o bien en el application-config...
<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>
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.
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
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:
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
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...)
eugeniaperez.es
9.1 La capa de persistencia (II)
Por lo tanto se introducen:
@Autowired
private GenericDAO<Task> taskDAO;<bean id="taskDAO" class="org.sistema.springmvc.forms.dao.GenericDAO">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
eugeniaperez.es
9.1 La capa de persistencia (II)
Por lo tanto se introducen:
<bean id="userDAO" class="org.sistema.springmvc.forms.dao.UserDAO">
<property name="sessionFactory" ref="sessionFactory" />
</bean>@Autowired
private UserDAO userDAO;