Como converter entidades para DTOs sem código boilerplate com ModelMapper

  Рет қаралды 40,971

AlgaWorks

AlgaWorks

Күн бұрын

Curso Imersivo Especialista Spring REST:
alga.works/esr-yt
Curso Gratuito de Spring REST para Iniciantes:
alga.works/sri-yt
Neste vídeo você vai aprender um jeito simples e muito inteligente pra você converter objetos de entidades do modelo de domínio em novos objetos do modelo de representação de sua REST API.
Se você já conhece ou já trabalha com o padrão DTO, sabe que pra converter um objeto de entidade em um DTO gera muito código boilerplate (aqueles códigos repetitivos).
Mas hoje vai aprender uma nova ferramenta pra fazer esse trabalho sujo pra você.
Depois que você terminar de assistir esse vídeo, eu tenho certeza que vai querer refatorar seus projetos, porque esse negócio economiza muitas linhas de código MESMO!
Instagram:
/ alga.works
Blog:
alga.works/blog-yt
Mergulhe fundo com nossos cursos online de Java e Front-end:
alga.works/site-yt
#modelmapper #dto #spring #algaworks

Пікірлер: 62
@algaworks
@algaworks 3 жыл бұрын
O Curso Online e Gratuito de Spring REST para Iniciantes já vai começar. Entre os dias 11 a 18 de janeiro de 2021, aprenda a desenvolver a sua primeira REST API. Faça a sua inscrição agora: alga.works/sri-yt
@edimarlemos6073
@edimarlemos6073 3 жыл бұрын
Aq
@FelipePereira010
@FelipePereira010 2 жыл бұрын
4:00 - o contexto 5:50 - sobre a biblioteca e como adicionar 7:09 - como usar 8:00 - classe de config, e porque usar 13:07 - estratégias do ModelMapper 16:00 - mais configuracoes na classe config 21:26 - Usando Converter do modelMapper
@gamagabriel
@gamagabriel 2 жыл бұрын
Obrigado!
@raphaelruiz5089
@raphaelruiz5089 Жыл бұрын
merece um certificado
@Ozymandias_z
@Ozymandias_z 2 жыл бұрын
Excelente Aula! Uma sugestão, seria interessante deixar o link do repositório disponível para baixarmos e praticarmos junto.
@rickhunter8216
@rickhunter8216 Жыл бұрын
CORRECTO.
@pedrodantas5351
@pedrodantas5351 3 жыл бұрын
Thiago, você sempre me salva com suas explicações. Se me permite, deixo uma dica de vídeo: explicar para que serve e como usar o stream e o streambuilder.
@RogerioAndrade
@RogerioAndrade 3 жыл бұрын
Cara, eu inseri o ModelMapper em um projeto que trabalhei e em algumas conversões o tempo de processamento era absurdo e só consegui pegar isso com debug. Como eu tinha pouco tempo, desisti de usar e fiquei com o BeanUtils do Spring em classes que criei com o código de conversão, ficando globalizado também. Acho que ficou um mix de BeanUtils do apache, com o do próprio Spring. A proposta do ModelMapper é interessante, mas não atendeu o requesito performance. Acredito que tenha faltado alguma coisa. O vídeo ficou topizera, em especial os conversores, extremamente úteis. Muito obrigado!
@ViniciusVille
@ViniciusVille 3 жыл бұрын
Sugiro dar uma olhada no MapStruct. Trocamos em todos projetos aqui da empresa o ModelMapper por ele. Vale muito a pena, pois não utiliza reflection.
@AndersonSantos-ur4nf
@AndersonSantos-ur4nf Жыл бұрын
Ótima explicação, obrigado por compartilhar o conhecimento, parabéns pelo seu trabalho.
@douglasandrade5199
@douglasandrade5199 3 жыл бұрын
Gostei muito vídeo Thiago, Obrigado. Faz um bom tempo que estudo Java e N outras linguagem, melhorei bastante, Java era favorita até conhecer a Linguagem Kotlin. Achei genial o suporte da modelmapper para conversão de classe para DTO. Compreendo porque o Java é consistente. Algo importante também a destacar é a qualidade mantida que a Algaworks mantém, isso é muito bom para todos.
@andrevini85
@andrevini85 3 жыл бұрын
Achei excelente o ModalMapper, não conhecia e gostei muito da forma que ele resolve essas conversões mais negociais. Valeu pela explicação!!!
@algaworks
@algaworks 3 жыл бұрын
Valeu, mergulhador!
@NiChOlAs-gw7iw
@NiChOlAs-gw7iw 3 жыл бұрын
Thiago saca muito!! AlgaWorks the best!
@gamagabriel
@gamagabriel 2 жыл бұрын
Obrigado pela aula! 👏🏼👏🏼
@wardevley
@wardevley 3 жыл бұрын
Hoje eu uso MapStruct, se puder fazer um video sobre o assunto tambem seria maravilhoso.
@algaworks
@algaworks 3 жыл бұрын
Valeu pela sugestão, mergulhador! 💙
@ViniciusVille
@ViniciusVille 3 жыл бұрын
Ótima sugestão. Apoiado! Trocamos nos projetos aqui da empresa o ModelMapper pelo MapStruct, pois não utiliza reflection. A performance é muito boa. Valeu muito a troca.
@Viles-
@Viles- 2 жыл бұрын
Cara eu acho incrível como fazendo testes com Mapstruct sempre retorna null.
@rogeriotadeudosreis342
@rogeriotadeudosreis342 Жыл бұрын
Bom dia Tiago, tudo bem ? sempre assisto seus vídeos e curto muito...uma dúvida por favor... Validação de campos do formulário no backend, o @Valid, coloco as anotações na entidade ou no dto ?
@algaworks
@algaworks Жыл бұрын
Se você utiliza um DTO para receber os dados do front-end, você deve colocar as validações do DTO, assim fica mais fácil utilizar as demais funcionalidades do Spring para exibir os erros ao usuário ou front-end.
@bhrunnomedeiros5393
@bhrunnomedeiros5393 3 жыл бұрын
Existe a possibilidade de utilizar o : BeanUtils.copyProperties(ObjetoRecebido, ObjetoRecebeInf) Esta opção esta relacionado ao spring-beans. Gostaria de saber, qual seria as vantagens e desvantagem em comparação ao modelMapper.
@jardelschaefer
@jardelschaefer 3 жыл бұрын
Legal! Aqui geralmente uso queryDsl e já busco o Dto preenchido assim que a consulta é executada..
@cirilolxjunior
@cirilolxjunior 3 жыл бұрын
Bom vídeo. Podendo noutra oportunidade falar mais sobre as estratégias com exemplos seria bem legal.
@LuizGustavo-cl7qw
@LuizGustavo-cl7qw 3 жыл бұрын
No caso um projeto tem vários DTOs, todas as regras ficariam no @Bean ModelMapper?
@HenriqueSantos88
@HenriqueSantos88 3 жыл бұрын
Massa demais hein ...
@barbaraoliveira2852
@barbaraoliveira2852 3 жыл бұрын
Interessante, só conhecia o mapstruct para converter entidades. Ótimo vídeo 😁
@algaworks
@algaworks 3 жыл бұрын
Valeu, mergulhador!
@michelsoliva9103
@michelsoliva9103 3 жыл бұрын
Vocês utilizam o modelmapper no curso especialista rest?
@alcn1
@alcn1 3 жыл бұрын
Ótimo vídeo!
@algaworks
@algaworks 3 жыл бұрын
Valeu, mergulhador!
@joaofb7479
@joaofb7479 3 жыл бұрын
Na minha opinião trocou 6 por meia dúzia... Um construtor já resolveria e no caso do stream tbm cairia muito bem, até melhor que um método privado dentro do controller
@algaworks
@algaworks 3 жыл бұрын
Fazer isso no construtor do DTO continuaria chamando os setters e getters para cada propriedade. A mágica do ModelMapper é que ele tem as estratégias de correspondência que auxiliam bastante. Também não acho legal acoplar um DTO a uma entidade.
@anscx
@anscx 2 жыл бұрын
Com Spring eu sempre utilizava o BeanUtils.CopyProperties(Source, Destination) e dava bom
@jessesantos7679
@jessesantos7679 2 жыл бұрын
Será que tem alguma diferença entre eles? Recentemente usei esse beanUtils e ele parece ser bem mais simples que esse mapper ou que o struct
@eryckavelino1378
@eryckavelino1378 Жыл бұрын
Opa, então eu ultilizo um metodo de conversão de dto para entidade para fazer save e update nas minha aplicações onde eu paço apenas o id da entidade e ele salva o relacionamento, nesse caso eu crio um medoto void que que fazer essas comparações e no caso dos relacionamento eu tenho que fazer a injeção dos repositorys dessas entidades no service para poder fazer uma busca dessas entidades e poder salvar, o model mapper pode resolver essas questão tbm, pois acaba sendo um metodo enorme dependendo da entidade, alem de que pode acarretar varios if e else. Eu tbm crio outro aonde eu faço um update que abro varios if validando se o campo e null, se n for ele salva se n ele apenas permanece com o que ja tinha.
3 жыл бұрын
Faz um video sobre o mapstruct tb. Hoje prefiro trabalhar com ele
@algaworks
@algaworks 3 жыл бұрын
Valeu pela sugestão, mergulhador!
@oficialreinaldoneves
@oficialreinaldoneves 2 жыл бұрын
Como injetar uma instância de ModelMapper quando estamos lidando com testes unitários? O Mockito por exemplo saberia assumir esse papel no lugar do Spring? Grato!
@adoniasalcantara522
@adoniasalcantara522 3 жыл бұрын
Em kotlin basta apenas adicionar uma extension, fica simples e sem acoplamento
@horaciovicentecomatejunior7737
@horaciovicentecomatejunior7737 3 жыл бұрын
Boa tarde, E a conversao de DTO para o objecto do dominio? Como faco?
@laurasuzany1187
@laurasuzany1187 2 жыл бұрын
Show
@lucaspiano
@lucaspiano 2 жыл бұрын
Rapaz, video bem legal esse seu. Parabéns. Eu to usando o ModelMapper num projeto aqui e estou com um prob que eu não consegui entender como resolver e nem no StackOverflow me ajudaram... Será que vocês aqui não conseguiriam me dar uma idéia, por favor? Eu tenho 1 Entidade que tem uma lista dentro dela e eu quero nesse mapeameno passar essa lista de um tipo de DTO pra esse mesmo tipo de entidade, ex.: public class PessoaDTO { private String nome; private List funcionarioDTOList; //getters and setters } Como faço pra transformar esse PessoaDTO em PessoaEntiity mas com o List também virar um List na minha classe de entidade PessoaEntity, por exemplo? To quebrando a cabeça nesse negócio... rsrs Se puder me mandar algum link disso, ficaria agradecido pq os que achei aqui não me atenderam. Obrigado.
@samuraidf
@samuraidf 3 жыл бұрын
Soluções com construtores conseguem suprir a maioria dos casos de conversão para DTO.
@estudosf5287
@estudosf5287 3 жыл бұрын
Como seria isso?
@algaworks
@algaworks 3 жыл бұрын
Também não entendi como seria essa solução... Existem várias formas de resolver o mesmo problema. A forma inicial apresentada no vídeo (com bastante código boilerplate) é uma delas. ModelMapper é outra.
@paulomarcio228
@paulomarcio228 3 жыл бұрын
No finalzinho eu achei que o método no controller ficou menos verboso, mas em compensação lá no mapper aumentou um pouquinho a complexidade. Mas é melhor deixar o controller mais clean mesmo.
@algaworks
@algaworks 3 жыл бұрын
O legal é que se você adicionar uma propriedade na entidade e quiser adicionar também no DTO, não precisa fazer mais nada. O ModelMapper (através da estratégia de correspondência) já vai identificar isso e atribuir automaticamente.
3 жыл бұрын
nunca mais me preocupei com getter e setter depois que conheci o lombok
@ricardoricarte1776
@ricardoricarte1776 Жыл бұрын
tem o link do reposiotorio?
@jorgemiguel9637
@jorgemiguel9637 Ай бұрын
Olá. Quanto tenho um Modelo com um atributo "private List modelos = new ArrayList();" como utilizo o ModelMapper? Obrigado.
@algaworks
@algaworks Ай бұрын
Fala mergulhador! Você teve fazer uma iteração pela lista que tem, converter um objeto por vez, e em seguida, adicionar na lista nova.
@arozendojr
@arozendojr 3 жыл бұрын
Já trabalhou em algum projeto de migração (java 5 para o java 7) ou (java 5 para java mais atual na época)? Pergunto, pois a água já está batendo na bunda, java 7, GA Date July 2011,Premier Support Until July 2019,Extended Support Until July 2022*****. Seja, tem alguma dica ? (vou colocar o link da font no próximo comentário)
@jonathassantos8304
@jonathassantos8304 Жыл бұрын
Quanto a testes unitários, ModelMapper dá problemas?
@algaworks
@algaworks Жыл бұрын
Olá Jonathan, nunca tivemos problemas em relação a testes unitários e modelmapper.
@eucleitonferreira
@eucleitonferreira 3 жыл бұрын
Não entendo pq fazem a chamada do repository diretamente pela controller. Deveria existir uma camada intermediaria de serviço fazendo a ponte entre controller e repository. Me desanimou comprar um curso de "Especilista Rest" após ver algo assim.
@ricardojohannsen374
@ricardojohannsen374 2 жыл бұрын
a camada service não é obrigatória, em um projeto pequeno desses ela mais atrapalha que ajuda, mas no projeto do curso deles eles usam a camada service por ser algo mais elaborado. Coisa que eu tinha raiva era ter uma camada service que não tem regra de negócio nenhuma e só delega chamada de métodos do controller para o repositório, era mais uma interface e uma classe inúteis para cada entidade
@brovedan88
@brovedan88 2 жыл бұрын
ModelMapper deixa a aplicação lenta. Não use-o!
@arozendojr
@arozendojr 3 жыл бұрын
Fonte: A água batendo na bunda de projetos que usam java antigo www.oracle.com/java/technologies/java-se-support-roadmap.html
@thiago75501
@thiago75501 3 жыл бұрын
Biblioteca mt ruim. Não compensa a utilização
@ricardojohannsen374
@ricardojohannsen374 2 жыл бұрын
existe a map struct como alternativa, mas eu também prefiro fazer na mão
Design-first para desenvolvimento de REST APIs
22:25
AlgaWorks
Рет қаралды 24 М.
JAVA DTO Pattern Tutorial | Simplify Your Code
19:12
Amigoscode
Рет қаралды 207 М.
Зу-зу Күлпаш 2. Бригадир.
43:03
ASTANATV Movie
Рет қаралды 521 М.
Watermelon magic box! #shorts by Leisi Crazy
00:20
Leisi Crazy
Рет қаралды 98 МЛН
Un coup venu de l’espace 😂😂😂
00:19
Nicocapone
Рет қаралды 8 МЛН
Java e Spring: camadas, ORM, DTO
30:06
DevSuperior
Рет қаралды 42 М.
Mergulhando em JWT na prática (Bônus: JOSE, JWA, JWS e JWE)
27:35
DTO - Para que servem? Onde Utilizar?
14:20
Full Cycle
Рет қаралды 23 М.
Learn how Spring Boot Model Mapper works Fast and Simple
20:55
Fast and Simple Development
Рет қаралды 25 М.
Turbinando a camada de persistência com Spring Data JPA
45:04
Spring ultimate basics: What are Spring Beans and what is the Spring Container?
16:30
DTO vs Records no Java - Você sabe na PRÁTICA COMO USAR?
20:36
Jamerson Souza
Рет қаралды 8 М.
Como criar uma REST API com Spring Boot (tutorial passo a passo)
42:58
Зу-зу Күлпаш 2. Бригадир.
43:03
ASTANATV Movie
Рет қаралды 521 М.