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;
Unit 9
By eugenia_perez
Unit 9
- 1,089