Mapowanie obiektów w aplikacji Spring (Spring Boot)

  Рет қаралды 8,379

Mateusz Dąbrowski

Mateusz Dąbrowski

Күн бұрын

Пікірлер: 54
@matdabski
@matdabski 3 жыл бұрын
Jeśli podobają Ci się moje filmy, to zostaw łapkę w górę i za subskrybuj mój kanał. Zapraszam Cię także do zapoznania się z moimi kursami i warsztatami: 🟢 Kurs Hibernate i JPA - kursy.nullpointerexception.pl/hibernate/ 🟠 Warsztat Architektura Heksagonalna - kursy.nullpointerexception.pl/product/warsztat-architektura-heksagonalna/ 🟢 Kurs Testy Jednostkowe - kursy.nullpointerexception.pl/testy-jednostkowe/ 🟠 Warsztat Architektura Warstwowa - kursy.nullpointerexception.pl/product/warsztat-architektura-warstwowa/
@pawebugiel319
@pawebugiel319 Жыл бұрын
Bardzo dobry materiał. Pozdr
@januszkuznik137
@januszkuznik137 3 ай бұрын
Cześć, to moj pierwszy komentarz na Twoim kanale. Na poczatku swojej nauki przekazywane pezez Ciebie tresci nie za bardzo do mnie trafialy, teraz stwierdzam, że cały Twoj kanał to czyste zloto! Tylko jeszcze pytania co do filmu pytanie.. zgodzisz sie ze POST nie jest idempotetną metodą? Jak dziala hibernate przy wolaniu metody PUT, dozwolone tam jest entity.setId(id); 15:00 ?
@matdabski
@matdabski 3 ай бұрын
Tak, pomyliłem się POST nie jest idempotentny ;) Hibernate monitoruje stan encji, więc jak zrobisz set, to Hibernate automatycznie zapisze encję (tylko tyle wystarczy nie musisz robić save). Więc jak najbardziej możesz używać setterów. Co do samego setId, to raczej się tego nie robić, chyba że sam zarządzasz nadawaniem id encjom, co jest mało wygodne. Lepiej, żeby robiła to baza przez np auto_increment, lub jakąś sekwencję.
@januszkuznik137
@januszkuznik137 3 ай бұрын
@@matdabski dzięki
@lukasz-cpu2416
@lukasz-cpu2416 3 жыл бұрын
Fajne filmy nagrywasz! Widać że przyjazny jesteś i nie nadęty jak niektórzy programiści, daję suba i zostawiam łapkę w górę
@matdabski
@matdabski 3 жыл бұрын
Dzięki za miłe słowa lukasz-cpu 😉
@prezes617
@prezes617 3 жыл бұрын
Wielkie dzięki za materiał! Dostaję od Ciebie newsletter i mail z tym filmikiem gdzieś mi utonął, szukałem czegoś na skrzynce i wpadłem właśnie na niego, a akurat od paru dni mierzyłem się dokładnie z tym tematem! Magia :D Tłumaczysz w klarowny sposób i masz świetne pomysły na filmiki, pozdro :)
@matdabski
@matdabski 3 жыл бұрын
Hehe. No widzisz jak łatwo przegapić coś wartościowego 😉
@sirwitold3538
@sirwitold3538 3 жыл бұрын
Dziękuję za kolejny wartościowy materiał :)
@matdabski
@matdabski 3 жыл бұрын
Dzięki SirWitold 😉
@robertstan6108
@robertstan6108 3 жыл бұрын
Super materiał. Wszystko klarownie przedstawione. Czekam na kolejne filmy ;)
@matdabski
@matdabski 3 жыл бұрын
Dzięki Robert, staram się jak mogę 😉
@gallanonim4914
@gallanonim4914 2 жыл бұрын
@matdabski Świetny, rzeczowy materiał. Dzięki Mateusz, robisz świetną robotę. Zarówno na YT jak i na swoim blogu. Pozdrawiam
@malpathekoxato
@malpathekoxato 2 жыл бұрын
Super film Mateusz. Zostałem nowym subskrybentem.
@TheGodoffuture
@TheGodoffuture 3 жыл бұрын
Dla zasięgu
@matdabski
@matdabski 3 жыл бұрын
Super 😉 Dzięki 😉
@djamsterdam007
@djamsterdam007 3 жыл бұрын
Dzięki, Mateusz :)
@matdabski
@matdabski 3 жыл бұрын
Dzięki djamsterdam007 😉
@dawidsieradzki1938
@dawidsieradzki1938 3 жыл бұрын
Mateusz !!!! Czytasz dosłownie mi w myślach, akurat mam problem z tym zagadanieniem a tu bachhhh wjeżdzasz Ty na białym koniu :) Wielkie dzieki !!!
@matdabski
@matdabski 3 жыл бұрын
Hehe 😀 Super cieszę się, że mogłem pomóc 😉
@mike6277
@mike6277 Жыл бұрын
Troche dużo kodu przy unikaniu rekursji w wypadku one to many itp , nie wystarczyłoby użyc @JsonManagedReference i @JsonBackReference ?
@Oziaka
@Oziaka 3 жыл бұрын
Bardzo fajny materiał , to jest dobra praktyka, chciałem dodać że istnieje coś takiego jak dozer i jest to mapper ogólnie dopiero co zacząłem z niego korzystać ale już widzę w nim wiele plusów, jeżeli kiedyś korzystałeś z jakiegoś mappera to chętnie bym objerzał tutorial w twoim wykonaniu. Pozdrawiam :) wierny fan i posiadacz twojego kursu hibernate
@matdabski
@matdabski 3 жыл бұрын
Dzięki. Z maperów polecam MapStructa, o którym mam zamiar zrobić materiał. Dozer działa trochę inaczej, bo używa refleksji, co może być trochę powolne. MapStruct to generator kodu, dlatego działa trochę szybciej, także polecam zainteresować się MapStructem.
@bartoszrybak4809
@bartoszrybak4809 3 жыл бұрын
Cześć, z jednej strony odcinek dobry bo pokazuje jak mapowanie wygląda na czysto/w czystej Javie dlatego początkujący mogą zobaczyć na czym to polega i dlaczego jest to potrzebne. Fajnie, że pokazałeś też use cases jak np. z tym zapętlaniem jsona. Troche zabrakło mi omówienia popularnych rozwiązań jak ModelMapper, MapStruct, JMapper, z czym się które je, czym się różnią, wydajność itp. Wydaje mi się, że większość aplikacji (ale tylko wydaje być może masz inne doświadczenia) korzystają z gotowych, sprawdzonych rozwiązań. Jeśli dla każdego DTO (a mogłoby ich być ze 100) mielibyśmy pisać mappery i własnoręcznie za każdym razem wklepywać te same rzeczy to byłaby duża nadmiarowość kodu :) Niemniej jednak odcinek przydatny społecznie :D Czekam cierpliwie na architekturę hexagonalną i mikroserwisy :D Pozdrawiam i nie przestawaj tworzyć treści bo są naprawdę wartościowe!
@matdabski
@matdabski 3 жыл бұрын
Cześć Bartosz, dzięki za wartościowy komentarz. Rozumiem, o co Ci chodzi, ale ten odcinek miałby chyba ze 3 godziny gdybym zaczął omawiać wszystkie narzędzia do mapowania. Ale fakt nawet o nich nie wspomniałem, a powinienem, niestety mój błąd. Mogłem wspomnieć, że takie narzędzia istnieją. Z drugiej strony mam w planie nagrania czegoś o MapStructcie, wiec będzie jeszcze rozwinięcie tego tematu. I też taki trochę był plan, żeby pokazać początkującym, jak to można robić ręcznie. Co jest dosyć ważne moim zdaniem. Co do mapowania, ręcznego 100 Dto, to pracowałem, z aplikacjami gdzie robiło się to ręcznie. Nie było z tym problemu, trochę sporo klepania, ale jednak czasem trzeba. Wszystko zależy od aplikacji, nad jaką pracujesz. To, że takie narzędzia istnieją, to nie znaczy, że nie ma z nimi problemów, a są i to czasem duże, sam miałem spore problemy z MapStructem i pamiętam jak czekałem na wydanie wersji 1.3, w której naprawili jeden błąd, a okazało się, że jedne rzeczy naprawili, a inne trochę pozmieniali i miałem z tym mały zgrzyt. I właśnie przez te problemy niektórzy rezygnują z różnych takich narzędzi na rzecz ręcznego klepania takiego kodu. Może powiem coś o tym jak będę robił odcinek o MapStructcie.
@rajkonkret
@rajkonkret 3 жыл бұрын
super materiał
@matdabski
@matdabski 3 жыл бұрын
Dzięki rajkonkret 😉
@gimi818
@gimi818 Жыл бұрын
Cześć, Mam pytanie jaka jest różnica między konwertowaniem na DTO w controllerze a konwertowaniem w service ?
@matdabski
@matdabski Жыл бұрын
Nie ma różnicy. Jak potrzebujesz coś skonwertować w serwisie, to konwertujesz. Jak potrzebujesz w kontrolerze, to też to tam robisz. Jedynie możesz się zastanowić, gdzie będzie lepiej i czy potrzebujesz tego w tym, czy w innym miejscu. Różni ludzie różnie robią, trzymają się różnych konwencji, ale tak naprawdę to nie ma to aż takiego znaczenia. Tak naprawdę trzymanie się jakiejś konwencji, że np. "konwertujemy tylko w kontrolerach" jest uciążliwe, więc ja przyjmuję konwencję: konwertuję tam, gdzie potrzebuję i jeśli potrzebuję i to się sprawdza dosyć dobrze.
@gimi818
@gimi818 Жыл бұрын
@@matdabski dziękuję za wyjaśnienie :D
@zoltobialozielony
@zoltobialozielony 3 жыл бұрын
Super odcinek, dziekuje. Mam jeszcze pytanie, skad czerpiesz wiadomosci dotyczace backendu? baeldung, dzone? Nie tylko java, ogolnie toole, frameworki, liby itp :)
@matdabski
@matdabski 3 жыл бұрын
Cześć, dobre pytanie. Generalnie już nie wiele newsów czytam. Przez lata czytałem blogi, oglądałem różne prezentacje na KZbin, kanały Devox, kiedyś Confitura i WJUG, słucham czego ludzie używają, sprawdzam co i jak itp. Raczej nie czytam Dzone, bo to trochę śmietnik. Bealdung jest ok, ale w większości to podstawowe tutoriale 😉
@marekborecki1116
@marekborecki1116 3 жыл бұрын
Dzięki za filmik. Będzie może coś o microservisach?
@matdabski
@matdabski 3 жыл бұрын
Dzięki 😉 Tak, ale trudno powiedzieć kiedy. Może zrobię jakąś ankietę, bo nie wiem, jak duże jest zainteresowanie tematem.
@waldemarjankowski4090
@waldemarjankowski4090 3 жыл бұрын
Nie obejrzałem jeszcze do końca odcinka ale zadaje pytanie, żeby nie zapomnieć, w 11 minucie wspomniane zostało, że w encji są adnotacje związane z mapowaniem Hibernate na bazę danych, a adnotacje walidacyjne powinny być umieszczone w DTO, tam jeszcze padło takie zdanie, że "chcielibyśmy dodać adnotacje dokumentacyjne do swaggera...", czy one powinny być w encjach czy dtosach? A może jeszcze w czymś innym?
@matdabski
@matdabski 3 жыл бұрын
W Dto
@waldemarjankowski4090
@waldemarjankowski4090 3 жыл бұрын
@@matdabski a czy encje powinny być widoczne w swaggerze, czy tylko DTO?
@matdabski
@matdabski 3 жыл бұрын
@@waldemarjankowski4090 w swaggerze widzisz tylko to, co wystawiasz w metodzie kontrollera, więc zwykle to będą dto.
@waldemarjankowski4090
@waldemarjankowski4090 3 жыл бұрын
@@matdabski a okej, myślałem że widnieją tam też te z adnotacja Entity, a nie zauważyłem że nie poprawiłem PUT w kontrolerze. Dzięki
@Vuco7
@Vuco7 3 жыл бұрын
Sztosik materiał! Btw w Java 17 nie trzeba tez uzywac juz collectora, jesli chcemy zwrocic result streama do listy, ot wystarczy wywolac od razu metode toList(), taka ciekawostka xd
@matdabski
@matdabski 3 жыл бұрын
Dzięki Szymon, nie wiedziałem, że dodali .toList(), dobrze wiedzieć.
@mateuszorlicki5907
@mateuszorlicki5907 2 жыл бұрын
Czy nie lepiej by było bezpośrednio z bazy danych wyciągać dto zamiast wyciągać najpierw encje, a następnie mapować ją na dto ?
@matdabski
@matdabski 2 жыл бұрын
Generalnie z bazy danych wyciągasz tylko dane, i zwykle sterownik bazy danych podaje Ci je w formie jakiejś tablicy, a dopiero narzędzia takie jak Hibernate zamieniają to na obiekty encji lub DTO. Ale masz rację można użyć od razu DTO do konwersji. Ale jeśli używasz w metodzie zapytanie JPA poprzez adnotację @Query, a dzieje się tak często. To jest to trochę mało wygodne, bo musisz w query dopisać pakiet klasę i słowo kluczowe new. Dlatego rzadko się z tego korzysta.
@chz4zbykvke727
@chz4zbykvke727 3 жыл бұрын
Hej, używałeś kiedyś Kotlina w połączeniu ze Springiem?
@matdabski
@matdabski 3 жыл бұрын
Cześć, nie ale generalnie samego Kotlina znam i tak naprawdę poza różnicami, jakie są pomiędzy Javą i Kotlinem to w użyciu Springa nie ma jakiejś specjalnej różnicy. A dlaczego pytasz?
@chz4zbykvke727
@chz4zbykvke727 3 жыл бұрын
@@matdabski Super, to pytanie takie już do eksperta :D Entity najlepiej robić jako open klase, aby potem nie było problemów z wygenerowanymi toStringami i resztą wygenerowanych metod?
@matdabski
@matdabski 3 жыл бұрын
@@chz4zbykvke727 aha, czyli to nie do mnie ;) Ale mogę odpowiedzieć ;) Open oznacza, że po tej klasie można dziedziczyć. A w większości przypadków po encjach się nie dziedziczy, wiec open jest niepotrzebne.
@chz4zbykvke727
@chz4zbykvke727 3 жыл бұрын
@@matdabski Nie chodziło mi o modyfikatory dostępu (open/final), tylko o sam fakt działania hibernate (wymaga pustego publicznego konstruktora). Data klasa sama w sobie generuje equals(), hashCode(), toString() oraz gettery i settery. Czytałem, że hibernate może mieć problemy, jeżeli mamy wygenerowane właśnie equalsy i hasCode'y. Pytanie do eksperta czy to prawda, czy tylko mit?
@matdabski
@matdabski 3 жыл бұрын
@@chz4zbykvke727 Automatycznie generowane metody equals i hascode dla Hibernate to nie jest dobre rozwiązanie (to zwykle nie działa dobrze w przypadku encji). Ale w data classes można nadpisać te metody, więc można to obejść, gorzej jeśli zapomnisz nadpisać, to później ciężko znaleźć gdzie taki błąd został popełniony, więc chyba lepiej używać zwykłych klas w Kotlinie.
@mehow.
@mehow. 3 жыл бұрын
POST nie jest idempotentny :)
@matdabski
@matdabski 3 жыл бұрын
Masz rację, trochę przesadziłem ;) Chodziło mi o to, że dodaje zawsze nowego posta, co jest przeciwieństwem idempotencji.
Wszystko o REST API w Javie
1:14:23
Mateusz Dąbrowski
Рет қаралды 24 М.
Сестра обхитрила!
00:17
Victoria Portfolio
Рет қаралды 958 М.
Enceinte et en Bazard: Les Chroniques du Nettoyage ! 🚽✨
00:21
Two More French
Рет қаралды 42 МЛН
Мен атып көрмегенмін ! | Qalam | 5 серия
25:41
JAVA DTO Pattern Tutorial | Simplify Your Code
19:12
Amigoscode
Рет қаралды 222 М.
Jak przygotować  się do rekrutacji na programistę - Vlog 14
18:45
Mateusz Dąbrowski
Рет қаралды 3,1 М.
Jak przyśpieszyć serwowanie modelu ML? - Tutorial #18
16:31
Spring AOP - Implementacja aspektów
35:18
Mateusz Dąbrowski
Рет қаралды 7 М.
Jak łączyć się z zewnętrznym API w Javie
34:35
Mateusz Dąbrowski
Рет қаралды 13 М.
Spring Boot i wstrzykiwanie zależności - podstawy
25:32
Jak nauczyć się programowania
Рет қаралды 37 М.
Java Data Structures Tutorial
1:39:50
Amigoscode
Рет қаралды 353 М.
Jak przekwalifikowałem się na programistę - Vlog12
19:48
Mateusz Dąbrowski
Рет қаралды 2,8 М.
Лучший Гайд по Kafka для Начинающих За 1 Час
1:15:01