Antes de empezar

1

Pasos para aprender Java Spring

2

Instalación de ambiente de desarrollo: Windows

3

¿Java sigue siendo gratuito?

4

Instalación de ambiente de desarrollo: Linux Ubuntu

5

Instalación de ambiente de desarrollo: macOS

Introducción a Spring boot

6

¿Qué es y qué usaremos de Spring?

7

Conocer qué es una aplicación autocontenida

8

Crear nuestra aplicación con Spring Initializr

9

Hola mundo con Spring Boot

10

Configurar Spring Boot

11

Crear la estructura del proyecto

Spring Data

12

¿Qué es JPA?

13

Conocer qué es Spring Data

14

Conectar la base de datos a nuestra aplicación

15

Mapear las tablas como clases

16

Crear Entity cuando su clave primaria es compuesta

17

Mapear relaciones entre clases

18

Usar la interface CrudRepository

19

Query Methods

Construyendo nuestra API

20

Implementar la anotación @Repository

21

¿Qué es el patrón Data Mapper y qué resuelve?

22

Orientar nuestra API al dominio con MapStruct

23

Orientar nuestro repositorio a términos del dominio

24

Inyección de dependencias

25

Implementar la anotación @Service

26

Implementar la anotación @RestController

27

Exponer nuestra API

Mejorando nuestra API

28

Controlar las respuestas HTTP

29

Crear el dominio de compras

30

Mapear el dominio de compras

31

Crear el repositorio de compras

32

Probando nuestros servicios de compras

33

Documentar nuestra API con Swagger

Spring Security

34

Configurar la seguridad de nuestra API con Spring Security

35

Generar un JWT

36

Autenticación con JWT

37

Autorización con JWT

Despliegue de nuestra aplicación

38

Desplegar nuestra API desde la ventana de comandos

39

Desplegar nuestra base de datos con Heroku

40

Desplegar nuestra API con Heroku

41

Conclusiones y despedida del curso

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

4D
5H
35M
48S
Curso de Java Spring

Curso de Java Spring

Alejandro Ramírez

Alejandro Ramírez

Implementar la anotación @Service

25/41
Recursos

Aportes 14

Preguntas 11

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Estaba un poco confundido con el concepto de Repositorio y Servicio. Así que me puse a indagar un poco y resulta que el repositorio es la capa simple de acceso o de comunicación con el sistema de almacén de datos (ojo, solo comunicación), mientras que el servicio es la lógica de acceso a estos datos desde la aplicación, así pues un ejemplo sería: Entras a un cajero automática y sacas dinero de tu cuenta, el banco es el repositorio, y el cajero es el servicio.

Las implementaciones del método delete son buenos ejemplos de los estilos declarativo e imperativo.
El primero define el qué va a hacer el código mientras que el segundo define el cómo y por consiguiente se ven más detalles. Cabe aclarar que el estilo declarativo no puede existir sin el estilo imperativo ya que el primero se apoya en el segundo para ocultar las estructuras de control (if, else, switch, etc).

¿Porqué es necesario verificar que el producto exista en la base de datos antes de borrarlo? El Id normalmente se obtiene de procesos anteriores como de un listado, y si queremos saber si el borrado es exitoso se podría obtener el número de fila(s) eliminada(s) … lo digo porque esto se ve muy bonito y mantenible, pero es costoso en máquina… ¿no?

Nuestros servicios son negociadores entre el repositorio y los controladores

@Service:

Intermediario entre el controlador de la API y el repositorio

Creo que todo tiene un porque, al principio lo veía como algo repetitivo pero ahora tengo mas claro el porque se programa así.
Gracias profesor, excelente curso.

Creo que de esta forma es más legible el método delete:

    public boolean delete(long id) {
        if (get(id).isEmpty()) {
            return false;
        }
        repository.delete(id);
        return true;
    }

Esta linea se puede leer de la siguiente forma?, no entendí muy bien la instrucción
Si existia el producto y fue eliminado responde true de lo contrario response false
return getProduct(productId).map(Product ->{
productoRepository.delete(producttId);
return true;
}).orElse(false);

Para el que quiera entender de donde vienen estos objetos que nombra el profesor como el Optional o el método .map() … esto hace parte de lo que es Programación Funcional (Un paradigma de programación) de la cual Java año tras año ha tratado de adaptarse a este.
Actualmente se encuentra un curso de Java Funcional en platzi y es excelente.
https://platzi.com/cursos/java-funcional/

No hace falta usar el @Autowired en este caso porque Spring buscará la instancia de ProductRepository en su contenedor y se dará cuenta que existe creado previamente uno con el nombre productRepository, mismo nombre que el del atributo en ProductService. No obstante es buena práctica anotarlo con @Autowired

Otra opcion para el Delete, es con una lamda, queda mas prolijo me parece.

  public boolean delete(int productId){
        
        return getProduct(productId).map(product -> true).orElse(false);
    }```

Significado de @Service

Como usar el orElse del metodo map

Otra forma de hacerlo

	boolean isPresent = getProduct(productId).isPresent();

        if(isPresent) productRepositoryDomain.delete(productId);

        return isPresent;