¿Qué es Spring Framework? Características III

Ene 08 2020

Por Javier Cuervas

Tercera entrega de las características de Spring Framework. Aunque cada vez está más extendido el uso de Spring Boot como alternativa a Spring Framework por su simplicidad y ahorro de configuración, es interesante entender cómo funciona y aquí tienes algunas de las claves. 

Añadir contenido estático 

Si queremos añadir imágenes, ficheros o cualquier recurso, debemos indicarle a Spring dónde ir a buscarlos mediante la siguiente etiqueta en el fichero de configuración xml del dispatcher: 

En este caso le estamos diciendo que la carpeta raíz se llama “recursos”, que podemos hacer referencia al mapeo con el mismo nombre “recursos” y que dentro puede contener cualquier tipo de contenido. Para hacer referencia a esta ruta desde una vista, tendremos que utilizar la siguiente Expression Language (EL) JSP, que indica la ruta relativa del contexto de la aplicación seguido de la ruta y nombre de nuestro recurso: 

O bien usar la etiqueta JSTL <c:url> y especificar directamente la ruta relativa: 

JNDI 

La Interfaz de Nombrado y Directorio Java es una Interfaz de Programación de Aplicaciones de Java para servicios de directorio. Permite a los clientes descubrir y buscar objetos y datos a través de un nombre y de este modo facilitar el acceso a base de datos. 

Necesitamos por tanto primero crear un recurso JDBC de tipo DataSource en el fichero web.xml: 

 

Para luego referenciarlo mediante el nombre JNDI desde el fichero de configuración: 

Por último, habría que incluir en el fichero de configuración context.xml del servidor Tomcat, el recurso DataSource con la información de la conexión de base de datos: 

La capa de Servicio 

Se trata de clases envoltorio o wraper para las clases DAO, de modo que permita desacoplar aún más nuestra aplicación, pudiendo implementar una lógica específica sin necesidad de modificar las clases DAO. Por ejemplo si tuviéramos que hacer una select compleja con filtros, lo haríamos en una clase de Servicio que implemente la clase DAO. La idea es que las clases DAO contengan solo operaciones CRUD (Create, Read, Update, Delete). 

Hibernate 

Se trata de un framework de persistencia de datos open source, que permite realizar el mapeo relacional de objetos y operaciones de BD mediante sentencias SQL y HQL (Hibernate Query Language). La versatilidad o ventajas de usar este tipo de frameworks, es que podemos prescindir de utilizar lenguaje SQL de forma explícita gracias al mapeo que realiza entre los objetos y sus atributos con las tablas y campos de la base de datos. 

Hibernate es una implementación del estándar JPA (Java Persistence API) que es un framework del lenguaje de programación Java que maneja datos relacionales en aplicaciones usando la Plataforma Java en sus ediciones Standard (Java SE) y Enterprise (Java EE) con sus respectivas anotaciones. JPA se origina a partir del trabajo de la especificación de EJB3 para no perder las ventajas de la orientación a objetos y permitir usar objetos regulares (conocidos como POJO). 

El objetivo original de Hibernate era ofrecer mejores capacidades de persistencia que las ofrecidas por EJB2, simplificar las complejidades y complementar algunas características necesarias. 

 Existen muchas otras implementaciones de JPA

  • Hibernate 

  • ObjectDB 

  • TopLink 

  • CocoBase 

  • EclipseLink 

  • OpenJPA 

  • Kodo 

  • DataNucleus, antes conocido como JPOX 

  • Amber 

Las librerías que se manejan para poder hacer uso de este framework son: 

Gracias al patrón DAO y la capa de Servicio, podemos sustituir de forma sencilla la implementación la capa de persistencia y el tipo de acceso a base de datos. Bastaría con crear una nueva clase con los métodos CRUD

Para comenzar a usar Hibernate en nuestro proyecto Spring es necesario configurar el fichero de configuración xml, incluyendo el name space de transaccionalidad TX para habilitar transacciones con Hibernate

Deberemos añadir un Bean como factoría de sesiones Hibernate de tipo LocalSessionFactoryBean, que será implementado en nuestros DAOs con inyección de dependencia: 

 

De esta forma lo inyectamos: 

Añadiremos también un Bean que permitirá manejar y traducir excepciones Hibernate en excepciones Spring y otro Bean para habilitar las transacciones en Hibernate: 

Anotaciones JPA 

Con las anotaciones JPA sobre las clases POJOS, realizamos el mapeo entre las clases y atributos con las tablas y campos de base de datos. Esto junto con la configuración anterior en el fichero xml, nos permitirá ahorrarnos escribir nada de código MySql como era el caso de JDBC:  

@Entity -> Identifica que la clase Java será una tabla 

@Table(name=””) -> Indica el nombre de la tabla a la que corresponde en Base de datos 

@Id -> Indica que será un campo clave 

@Column(name=””) -> Indica el nombre del campo de base de dato al que corresponde el atributo 

@GeneratedValue -> Indica que será un valor autoincremental 

Algunos ejemplos de métodos de Hibernate a través de SessionFactory:

 

Ejemplo relación 1 a muchos 

Si queremos representar una relación de 1 a Muchos como la siguiente: 

 

Debemos anotar ambas clases de la siguiente forma: 

De modo que la clase Direccion contiene un atributo de tipo Admin, que representa el dueño de esa dirección y se indica el nombre de la columna en base de datos “idAd” con @JoinColumn, además de anotarlo con @ManyToOne para indicarle que un administrador puede tener una lista de direcciones. 

 Por otra parte, la clase Admin contiene un atributo de tipo Direccion que representa una lista de direcciones y que se anota con @OneToMany y el nombre del atributo que lo relaciona en la clase Direccion. 

 Para ver todas las direcciones de un administrador con Hibernate, lo haríamos así:

 

 Esto equivaldría en lenguaje SQL a: 

Referencias 

Página oficial de Spring 
 

https://spring.io/ 
 

Canal Youtube "MitoCode": 

Spring Framework 

Canal Youtube "PildorasInformaticas": 

Curso Spring 

 

Javier Cuervas


Comparte este artículo

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, dentro de nuestra Web de acuerdo a tus hábitos de navegación. Si continúas navegando, consideramos que aceptas expresamente su utilización. Puedes obtener más información de cómo gestionar y configurar las cookies en nuestra Política de Cookies.