Documentos de Académico
Documentos de Profesional
Documentos de Cultura
@Service
Las clases de negocio son aquellas que contienen métodos que resuelven el flujo principal del negocio
de nuestra aplicación. En estos métodos se resuelven, por ejemplo, la validación de datos de un cliente, la
coordinación de llamadas para guardar información en la base de datos, el envió de un email si se aprueba el
registro de un usuario, etc.
Las clases de negocio no acceden directamente a los datos (esto lo hacen los @Repository, que veremos más
adelante), ni tampoco se encargan de dibujar los datos al usuario (esto lo hacen las páginas HTML junto a los
@Controller).
Las clases de negocio se anotan con @Service en Spring, quien las levantará en su contexto para poder
inyectarla en donde sea necesario.
Los @Service son clases comunes, con métodos públicos que contienen la lógica de negocio.
Inyección de dependencias
En el @Controller pudimos agregar un atributo y dejar que Spring realice la inyección de dependencias por
nosotros. Spring realizará la inyección de dependencias de todos los objetos que gestione, ya sean
@Controller, @Service, @Repository y otros.
Para indicarle a Spring que realice la inyección de dependencias de una clase, basta con:
2. spring.datasource.username=videojuegos
3. spring.datasource.password=videojuegos
La interfaz que creemos deberá extender JpaRepository (indicando la clase y el tipo de datos del atributo que
es ID). Al extender JpaRepository, tendremos varios métodos útiles para buscar objetos, guardarlos,
actualizarlos y borrarlos.
2. }
ALTER de SQL
La sentencia ALTER de SQL nos permite modificar las estructuras existentes de la base de datos (como
tablas), manteniendo los datos ya almacenados.
Con ALTER podemos:
cambiar el tipo de datos de una columna (y la base realizará la conversión pertinente, si puede)
y más!
La sentencia ALTER se uso muchisimo en entornos productivos, donde queremos ir evolucionando el modelo
de datos sin perder la información ya almacenada.
De manera predeterminada, JPA asume que la columna en la tabla se llama como el atributo, agregándole el
sufijo _id al final. Podemos usar la anotación @JoinColumn para indicarle manualmente cuál es el nombre de
la columna que es la foreign key a otra tabla.
1. @ManyToOne
2. @JoinColumn(name="distribuidor_otro_id")
3. private Distribuidor distribuidorAdicional;
Resumen de la sección: consultas avanzadas con
Spring Data JPA
En esta sección aprendimos el uso de @Query para crear consultas personalizadas a la base de datos.
@Query
La anotación @Query de Spring Data JPA nos permite asociar una consulta a un método de un Repository.
De esta forma, podemos crear métodos que resuelven consultas pesonalizadas y devuelven objetos de
dominio (aquellos anotados con @Entity de JPA).
En JPQL consultamos las instancias de objetos (en lugar de tablas) y atributos de los mismos (en lugar de
columnas). Es decir, hacemos referencia a clases y atributos, que tienen que estar mapeados con JPA.
JPA luego traduce esta consulta JPQL a SQL para que la base de datos puede ejecutarlo.
1. @Query("from Pais p order by p.nombre")
2. List<Pais> buscarTodos();
Podemos usar parámetros para personalizar al consulta. Los parámetros se agregan al método
normalmente, y luego se referencian en la consulta por posición, con ?1, ?2, ?3 y así sucesivamente.
1. @Query("from Pais p where p.continente = ?1")
3.
3.
6.
2. List<Pais> buscarTodos();
Con SQL nativo JPA usará el query exacto tal cual lo escribimos, con lo cual podemos usar funciones o
consultas complejas propias del motor de base de datos que estamos usando.
Leer más
Query Methods
Spring Data nos provee una forma alternativa a @Query para crear métodos de consulta, y es a través de los
Query Mehtods. Un Query Method es la creación de una consulta a partir del nombre de un método, el cual
tiene que seguir cierta sintaxis. Los Query Methods son muy prácticos para crear consultas simples y rápidas,
y nos evitan el uso de @Query. Los query methods empiezan con la palabra findBy y siguen con las
condiciones.
1. findByNombre(String n)
2. findByNombreAndApellido(String n, String a)
3. findByApellidoOrderByNombreAsc(String a)
Resumen de la sección: formulario de alta para crear
datos
En esta sección aprendimos a crear un formulario en HTML que envie datos a un Controller de Spring MVC
para guardar un objeto.
Bootstrap provee varios ejemplos de FORM que nos permite crear formularios rápidos y atractivos.
El atributo METHOD, que indica cómo se enviará la información al servidor. Puede ser GET o POST.
Con GET los valores se envían directamente en la URL, de manera que el usuario puede guardar la página
para consultar más tarde. Con POST los valores se envian en el cuerpo del mensaje HTTP, y por lo tanto no se
ven en la URL.
El atributo ACTION, que indica a qué URL se deberá enviar la información.
Elementos que permiten la entrada de datos del usuario. Suelen ser INPUT, SELECT o TEXTAREA. Cada
uno de estos elementos tiene un atributo NAME, que permite indicar el nombre del valor que se enviará.
Sobre el FORM agregamos el atributo th:object="${miObjeto}" para asociar un objeto del Model al formulario.
Luego, usamos th:field="*{atributo}" sobre cada INPUT, SELECT o TEXTAREA que queremos asociar a un
atributo en particular.
Usamos las anotaciones @GetMapping() o @PostMapping() para indicar la URL que queremos procesar.
El método puede recibir un objeto cualquiera, que Spring MVC cargará con los datos del FORM que se envia.
Se asociará cada atributo del objeto a un elemento del FORM que tenga el mismo nombre.
4. <textarea th:field="*{observaciones}"></textarea>
Si el objeto a guardar tiene su id en null, JPA realizará un INSERT en la base de datos. El id de la clase además
indica la estrategia que se usará para obtener un nuevo id. Generalmente, se delega esta tarea a la base de
datos (estrategia conocida como IDENTITY).
Si el objeto a guardar tiene un valor en su atributo id, entonces JPA realizará un UPDATE en la base de datos.