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 Жыл бұрын
Bardzo dobry materiał. Pozdr
@januszkuznik1373 ай бұрын
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 ?
@matdabski3 ай бұрын
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ę.
@januszkuznik1373 ай бұрын
@@matdabski dzięki
@lukasz-cpu24163 жыл бұрын
Fajne filmy nagrywasz! Widać że przyjazny jesteś i nie nadęty jak niektórzy programiści, daję suba i zostawiam łapkę w górę
@matdabski3 жыл бұрын
Dzięki za miłe słowa lukasz-cpu 😉
@prezes6173 жыл бұрын
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 :)
@matdabski3 жыл бұрын
Hehe. No widzisz jak łatwo przegapić coś wartościowego 😉
@sirwitold35383 жыл бұрын
Dziękuję za kolejny wartościowy materiał :)
@matdabski3 жыл бұрын
Dzięki SirWitold 😉
@robertstan61083 жыл бұрын
Super materiał. Wszystko klarownie przedstawione. Czekam na kolejne filmy ;)
@matdabski3 жыл бұрын
Dzięki Robert, staram się jak mogę 😉
@gallanonim49142 жыл бұрын
@matdabski Świetny, rzeczowy materiał. Dzięki Mateusz, robisz świetną robotę. Zarówno na YT jak i na swoim blogu. Pozdrawiam
@malpathekoxato2 жыл бұрын
Super film Mateusz. Zostałem nowym subskrybentem.
@TheGodoffuture3 жыл бұрын
Dla zasięgu
@matdabski3 жыл бұрын
Super 😉 Dzięki 😉
@djamsterdam0073 жыл бұрын
Dzięki, Mateusz :)
@matdabski3 жыл бұрын
Dzięki djamsterdam007 😉
@dawidsieradzki19383 жыл бұрын
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 !!!
@matdabski3 жыл бұрын
Hehe 😀 Super cieszę się, że mogłem pomóc 😉
@mike6277 Жыл бұрын
Troche dużo kodu przy unikaniu rekursji w wypadku one to many itp , nie wystarczyłoby użyc @JsonManagedReference i @JsonBackReference ?
@Oziaka3 жыл бұрын
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
@matdabski3 жыл бұрын
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.
@bartoszrybak48093 жыл бұрын
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!
@matdabski3 жыл бұрын
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.
@rajkonkret3 жыл бұрын
super materiał
@matdabski3 жыл бұрын
Dzięki rajkonkret 😉
@gimi818 Жыл бұрын
Cześć, Mam pytanie jaka jest różnica między konwertowaniem na DTO w controllerze a konwertowaniem w service ?
@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 Жыл бұрын
@@matdabski dziękuję za wyjaśnienie :D
@zoltobialozielony3 жыл бұрын
Super odcinek, dziekuje. Mam jeszcze pytanie, skad czerpiesz wiadomosci dotyczace backendu? baeldung, dzone? Nie tylko java, ogolnie toole, frameworki, liby itp :)
@matdabski3 жыл бұрын
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 😉
@marekborecki11163 жыл бұрын
Dzięki za filmik. Będzie może coś o microservisach?
@matdabski3 жыл бұрын
Dzięki 😉 Tak, ale trudno powiedzieć kiedy. Może zrobię jakąś ankietę, bo nie wiem, jak duże jest zainteresowanie tematem.
@waldemarjankowski40903 жыл бұрын
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?
@matdabski3 жыл бұрын
W Dto
@waldemarjankowski40903 жыл бұрын
@@matdabski a czy encje powinny być widoczne w swaggerze, czy tylko DTO?
@matdabski3 жыл бұрын
@@waldemarjankowski4090 w swaggerze widzisz tylko to, co wystawiasz w metodzie kontrollera, więc zwykle to będą dto.
@waldemarjankowski40903 жыл бұрын
@@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
@Vuco73 жыл бұрын
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
@matdabski3 жыл бұрын
Dzięki Szymon, nie wiedziałem, że dodali .toList(), dobrze wiedzieć.
@mateuszorlicki59072 жыл бұрын
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 ?
@matdabski2 жыл бұрын
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.
@chz4zbykvke7273 жыл бұрын
Hej, używałeś kiedyś Kotlina w połączeniu ze Springiem?
@matdabski3 жыл бұрын
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?
@chz4zbykvke7273 жыл бұрын
@@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?
@matdabski3 жыл бұрын
@@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.
@chz4zbykvke7273 жыл бұрын
@@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?
@matdabski3 жыл бұрын
@@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.3 жыл бұрын
POST nie jest idempotentny :)
@matdabski3 жыл бұрын
Masz rację, trochę przesadziłem ;) Chodziło mi o to, że dodaje zawsze nowego posta, co jest przeciwieństwem idempotencji.