Antes de empezar

1

Pasos para aprender Java Spring

2

¿Java sigue siendo gratuito?

3

Instalación de ambiente de desarrollo: Linux Ubuntu

4

Instalación de ambiente de desarrollo: macOS

5

Instalación de ambiente de desarrollo: Windows

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

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Java Spring

Curso de Java Spring

Alejandro Ramírez

Alejandro Ramírez

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

21/41
Recursos

Aportes 24

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Otra forma de instalar plugins en IntelliJ es ir a files > Settings o Ctrl + Alt + S / en Mac es con command + , (coma)
En el panel izquierdo se selecciona "plugins"
y solo queda buscar “MapStruct Support” e instalarlo 😃

DATA MAPPER

  • Convertir o traducir dos objetos que pueden hacer una misma labor

  • No exponer directamente la base datos medianta la API

  • Esto garantiza que ningun agente externo, vizualice la forma del diseño de la base de datos

  • Desacoplar la API de una base de datos puntual

  • En el caso que se desee integrar una nueva base de datos con otros campos, pero que sea para el mismo proyecto, no es necesario cambiar todo el código, simplemente se crea otro traductor que sirva para traducir la nueva tabla al dominio

  • Evita tener campos innecesarios en la API

  • Evitar mezclar idiomas en el dominio

también puedes instalar el plugin desde el IDE con clic en File > Settings (Ctrl + Alt + S) seleccionar la opción Plugins y buscar MapStruct Support e instalar 😋

“Estamos acoplando nuestra aplicación a la capa de la persistencia y nuestro proyecto está construido bajo un enfoque de dominio” Palabras del profe
¿Alguien me apoya explicando un poco mas lo que significa?

Porfa

Profe me puedes dar una explicacion breve del Optional que no lo tengo muy claro aún?

Si utilizamos los nombres en inglés, entonces no es necesario implementar lo del mapper?

Ahora entiendo todo, yo la verdad no le veía sentido al mapper, pero con esta explicación ya me hace sentido.

DataMappers - Mapeando los datos

Nos permite desacoplar la persistencia de la aplicación. Consiste en convertir o traducir varios objetos que pueden cumplir la misma labor. De esta forma podemos:

  • Independizar la base de datos de la API, desacoplanto la capa de persistencia o de negocio.
  • Desacoplarnos de una base de datos puntua, así no tendríamos que refactorizar todo el código si la capa de persistencia cambia.
  • Evitar campos innecesarios en la API.
  • Evitar mezclar idiomas en la aplicación.

¿Que ofrece el patrón Data Mapper?

No expone la DB a la API
Desacopla la API de la DB
Facilita mudar a otro moto de DB
Evita tener campos innecesarios en la API

Muy buenas, en caso de manejar el dominio y los entities en inglés, tendriamos dos clases con el mismo nombre que puede ser un poco molesto. Que recomiendan hacer en ese caso? Tal vez le podemos poner en un sufijo Entity.

Si alguno esta viendo esto en 2022
Los pasos de instalación de MapStruct Plugin son:

  1. Abrir opción “Preferencias”
  2. Clic en la opción “Plugins”
  3. Clic en el engranaje
  4. Clic en “Instalar desde disco”
  5. Buscan el ZIp
  6. Clic en OK
  7. Reiniciar el IntelliJ IDEA

Y listo 😃 espero les sirva

minuto 2 y ya estoy enamorándome de Data Mapper!!!

Estoy usando Spring Tool Suite y también esta el plugin en el market, lo pueden buscar como Mapstruct Support 😁👍

Me gustó cómo explicó el concepto de Data Mapper.

Esto seria igual a realizar con DTOS ? o el DTO cambia en algo?

¿Que ofrece el patrón Data Mapper?

  • No expone la DB a la API
  • Desacopla la API de la DB
  • Facilita mudar a otro moto de DB
  • Evita tener campos innecesarios en la API

otro punto a tener en cuenta es que en la clase product se tiene el campo categoryId y tambien se tiene el campo Category (que tiene intiernamente el campo id), esto a mi parecer es redundante, si voy a mostrar mi categoria completa en los productos no hay necesidad de crear un campo para categoryId

Por que en la Entidad es recomendable usar clases para lso tipos de las propiedades como Integer para el id, y en dominio si se pueden usar tipos primitivos hay alguna razón en especial?.

Wow, todo lo que se hace actualmente es fascinante

hay algunas cosas a tener en cuenta, no es muy deseable tener variables con el mismo nombre de la clase, adicionalmente es redundante tener en las variables composiciones con el nombre de la clase por ejemplo

public class Category {

private int categoryId; // deberia de llamarse id, ya se sobre entiende que este //campo hace referencia al id de la categoria
private String category; //deberia llamarse name o description
private boolean active;

baia baia