W poprzednim przystanku na mapie kariery wspomnieliśmy, że każdy poważny program, a tym bardziej większy system informatyczny, zajmuje się w głównej mierze przechowywaniem danych oraz ich przetwarzaniem.
Mimo ciągle rosnącej popularności nosqlowych baz danych, relacyjne bazy nadal mają się całkiem dobrze.
A skoro mowa o relacyjnych bazach, to trzeba wspomnieć o frameworkach, które wspierają nas w pracy z tymi bazami.
Mowa tutaj o tak zwanych ORM-ach, czyli systemach mapowania obiektów powiązanych relacjami
(Object/Relational Mapping).
Prościej mówiąc, wszystko co znajduje się w bazie danych łącznie z relacjami musi znaleźć swoje przełożenie na kod. Tak więc jeśli w bazie mamy do czynienia z tabelami i rekordami, to
po stronie kodu będą odpowiadać im encje. Jeśli w tabeli mówimy o kolumnach posiadających określony typ, to
w kodzie będą je reprezentować pola w encjach, również o określonym typie (typ obiektu Java).
Korzystanie z ORM-a znacząco ułatwia i porządkuje pracę z przetwarzaniem danych po stronie backendu.
Appa Notka.
Najpopularniejszym frameworkiem ORM jest Hibernate, który istnieje na rynku od kilkunastu lat.
Można z niego korzystać niezależnie od Springa, na przykład razem z EJB.
Z tego powodu Hibernate znajduje się na naszej mapie kariery przed Springiem.
Integracja Hibernate'a ze Springiem jest obecnie najczęściej spotykanym połączeniem w aplikacjach webowych.
Programując backend takiej aplikacji często spotykamy się z pojęciami takimi jak Spring Data JPA, JPA i Hibernate.
Nie każdy jednak wie, co mają ze sobą wspólnego oraz czym się różnią te pojęcia, dlatego przygotowaliśmy specjalny film, w którym odpowiadamy na te pytania!
W celu obejrzenia filmu na pełnym ekranie, kliknij w ikonę Youtube podczas oglądania filmu.
Kurs Hibernate w Springu
Kurs Spring Hibernate zawiera
2 duże projekty oraz
65 omówionych snippetów kodu, wzbogaconych dodatkowo
44 zdjęciami.
Każdy z tematów zawiera więc pełną teorię i praktykę, co pozwoli Ci dokładnie zrozumieć zagadnienia.
Interesujesz się Springiem lub Hibernate? Masz pytania odnośnie odnośnie tych frameworków?
A może chcesz po prostu wiedzieć, co w trawie piszczy?
Dołącz do nowej grupy, w której znajdziesz ciekawe posty oraz poznasz odpowiedzi na swoje pytania!
-
Regularnie publikowane posty dotyczące Springa i Hibernate'a
-
Możliwość zadawania pytań osobom tworzącym społeczność budowaną
wokół tych samych zainteresowań
-
Bezpośredni kontakt z autorem portalu i kursów Javappa!
-
Wymiana doświadczeń między członkami grupy
-
Przyjazna atmosfera w zamkniętej grupie
Dzięki temu kursowi nauczysz się:
-
Rozpoznawać zalety frameworka w porównaniu do tradycyjnego modelu, który wymaga żmudnego budowania własnych zapytań.
-
Rozumieć czym są encje i w jaki sposób tworzyć własne encje, aby były poprawnie zmapowane na struktury bazodanowe.
-
Przekładać relacje bazodanowe na relacje między encjami oraz obsługiwać umiejętnie takie relacje w swoim programie.
-
W jaki sposób wykorzystywać adnotacje Lomboka, po to by jeszcze szybciej i efektywniej korzystać z Hibernate'a.
-
Jak wykonać te same zadania w sposób klasyczny - bez Lomboka.
-
W jaki sposób połączyć Hibernate ze Spring Bootem, aby sprawnie i komfortowo uruchamiać swoje programy bazodanowe.
-
Zapisywać dane w bazie oraz odczytywać je na wiele różnych sposobów.
-
Realizować zadania w bezpieczny sposób poprzez zastosowanie transakcyjności.
-
Wykorzystywać bardziej zaawansowane mechanizmy Hibernate, które pozwolą Ci wydajnie i mądrze programować aplikacje bazodanowe.
Otrzymasz dokładne wytłumaczenie jak wykonać:
-
Tworzenie encji za pomocą adnotacji @Entity oraz @Table.
-
Tworzenie kluczy głównych za pomocą adnotacji @Id wraz z różnymi sposobami generacji wartości dla klucza.
-
Mapowanie kolumn bazodanowych za pomocą adnotacji @Column.
-
Klasę bazową za pomocą adnotacji @MappedSuperclass.
-
Opisanie pola wyliczeniowego za pomocą adnotacji @Enumerated.
-
Dwukierunkowe relacje jeden do jeden, jeden do wiele i wiele do wiele.
Poznasz dokładnie adnotacje @OneToOne, @OneToMany, @ManyToOne, @ManyToMany oraz @JoinTable.
-
Mapowanie z użyciem elementów takich jak cascade, orphanRemoval, mappedBy, joinColumns, inverseJoinColumns.
-
Wszystkie rodzaje modyfikacji danych CRUD, jak również bardziej skomplikowane algorytmy pracujące na relacjach.
-
Transakcyjne metody działające po stronie usług za pomocą adnotacji @Transactional.
-
Dziedziczenie encji za pomocą strategii Single Table Inheritance oraz Table Per Class Inheritance.
-
Mechanizm dyskryminatora wykorzystujący adnotacje @DiscriminatorColumn i @DiscriminatorValue.
-
Osadzanie w encjach za pomocą adnotacji @Embeddable i @Embedded.
Po wykupieniu dostępu pobierzesz plik z kodami źródłowymi przykładów oraz uzyskasz dostęp do dokładnego wytłumaczenia
tego kodu na stronach naszego portalu (zgodnie z poniższą listą rozdziałów).
Dobraliśmy materiały tak, aby było Ci łatwo zrozumieć i nauczyć się jak działa
Hibernate oraz Hibernate w Springu i w jaki sposób funkcjonują mechanizmy, na których opiera się praktycznie każda poważna aplikacja w Javie.
Lista rozdziałów
- Hibernate - Szybki wstęp
Bazy danych a Hibernate. Co to są i do czego wykorzystujemy adnotacje.
W pierwszym rozdziale kursu Spring Hibernate omawiamy jak wygląda praca z bazą danych bez frameworka, a jak wygląda z Hibernatem.
Wyjaśniamy czym są adnotacje i po co je stosujemy. Przedstawiamy również niewielką zajawkę na temat encji Hibernate.
Lektura tego rozdziału nakreśli Ci kierunek w jakim udajemy się w kursie.
-
Hibernate - Przygotowanie projektu
Jak wygląda nasz projekt szkoleniowy. Dlaczego warto łączyć Hibernate i Springa. Baza H2.
W drugim rozdziale przechodzimy do omówienia naszego wyjątkowego projektu. Przedstawiamy jego strukturę oraz metody działania.
W dalszej części materiału pokazujemy jak w prosty sposób można wdrożyć Hibernate'a do projektu Spring Boot (nawet całkowicie świeżego), a także
uczymy jak podpiąć bazę H2, aby od razu móc cieszyć się pracą z frameworkiem. Dzięki treści tego rozdziału zrozumiesz, że
aplikacje bazodanowe w Springu i Hibernate wcale nie muszę być skomplikowane jeśli tylko masz dobry punkt zaczepienia.
-
Hibernate - Pierwsze uruchomienie
Struktura bazy danych projektu. Pierwsze uruchomienie projektu w trybie inicjalizacji bazy.
W tym rozdziale pokazujemy dodatkowe zalety naszego programu. Wprowadzamy Cię w temat raportów na konsoli oraz wybierania trybów uruchomienia.
Przedstawiamy również strukturę bazy, na której będziesz pracował. Treść tego rozdziału pozwoli Ci zrozumieć obszar w jakim będziesz się
poruszał podczas nauki.
-
Lombok - Podstawy
Co to jest Lombok? Instalacja Lomboka. Najważniejsze adnotacje, takie jak @NoArgsConstructor, @AllArgsConstructor, @EqualsAndHashCode, @ToString, @Builder, @Slf4j, @Data (@Getter, @Setter, @RequiredArgsConstructor).
Kolejny rozdział zawiera materiał, który pozwoli Ci nauczyć się podstaw Lomboka. Jeśli nie znasz jeszcze tej biblioteki, to masz super szansę na nauczenie się
jej podstaw niejako przy okazji. W projekcie znajdziesz mnóstwo fragmentów kodu, które wykorzystują opisane w tym rozdziale adnotacje Lomboka.
Czytając ten rozdział sam zauważysz, że użycie biblioteki ma sens i jak niewiele trzeba, aby czerpać z niej naprawdę spore korzyści.
-
Hibernate - Pierwsza encja
Tworzenie pierwszej encji. Adnotacje @Id, @GeneratedValue, @Column, @MappedSuperclass oraz @Enumerated.
W tym miejscu przechodzimy do konkretów. Na bazie przykładu z projektu pokazujemy i wyjaśniamy do czego służa i jak działają najważniejsze adnotacje
Hibernate. Dowiesz się tutaj jak zdefiniować nazwę dla tabeli i jak generować klucz główny. Nauczysz się również tworzyć klasę bazową dla Twoich encji oraz
poznasz sposób zapisu typu wyliczeniowego do bazy. Na koniec zobaczysz czym różnią się projekty spring-boot-materialy-praktyczne oraz spring-boot-materialy-praktyczne-bez-lomboka
i jak możesz wykorzystać to, że jesteś w posiadaniu obu tych projektów.
-
Hibernate - CRUD
Wykonanie wszystkich metod CRUD. Adnotacja @Transactional.
Kolejny rozdział wprowadzi Cię w temat podstawowych operacji, które wykonywane są w niemal każdym systemie. Omawiamy tutaj CRUD czyli
implementacje metod typu Create, Read, Update, Delete, wykorzystując przy tym podstawy Hibernate oraz Spring Data JPA.
Jak zwykle przedstawiamy kolejne fragmenty kodu z naszego projektu, dzięki czemy ani na chwilę nie stracisz kontroli nad połączeniem tych dwóch rozwiązań.
Obowiązkowo wprowadzimy Cię w temat transakcyjności i pokażemy czym różni się to co zwraca menadżer encji od tego co obecnie znajduje się w bazie.
-
Hibernate - Relacja jeden do jeden
Relacja 1:1 w bazie vs relacja między encjami. Adnotacja @OneToOne. Element cascade. Czym grozi brak kaskadowości.
Tym rozdziałem zaczynamy cały cykl lekcji poświęconych relacjom w Hibernate. Tak jak między tabelami w bazie, tak samo między encjami odwzorowujemy
relacje. W tym przypadku jest to relacja jeden do jeden. Zaczynamy od przypomnienia jak to wygląda z punktu widzenia bazy danych, a potem
poswięcamy się już w całości tematowi relacji między encjami. Pokazujemy dokładnie jak działają poszczególne adnotacje oraz ich elementy.
Wyjaśniamy również w jaki sposób zapisujemy i odczytujemy dane w tym typie relacji.
-
Hibernate - Relacja jeden do wiele
Relacja 1:N w bazie vs relacja miedzy encjami. Adnotacja @OneToMany oraz @ManyToOne. Adnotacja @JoinTable. Właściciel relacji.
Drugi rozdział z cyklu lekcji o relacjach poświęciliśmy relacji jeden do wiele. Ponownie zaczynamy od bazy danych, by później omówić krok po kroku
działanie tych relacji między encjami. W naszych projektach napotkasz kilka relacji jeden do wiele. Będziesz mógł sam przyjrzeć się z bliska
jak te relacje funkcjonują w kodzie i jak wyglądają na wydruku z menadżera encji, a na końcu co widać w bazie danych.
-
Hibernate - Relacja wiele do wiele
Relacja M:N w bazie vs relacja miedzy encjami. Adnotacja @ManyToMany. Tabela łączącą. Elementy typu joinColumns.
W trzecim rozdziale o relacjach przedstawiamy najciekawszą i zarazem najbardziej złożoną relację - wiele do wiele. Dowiesz się tutaj
jak zamapować dwie encje, aby zostały stworzone dla nich dwie tabele, a także trzecia - łącząca. Na bazie tej relacji pokazujemy
kilka różnych scenariuszy, które oczywiście są częścią naszego projektu. Nauczysz sie tutaj budować i zapisywać relacje zarówno między nowymi encjami jak
i w połączeniu nowej encji ze starą encją istniejącą w bazie.
-
Usuwanie encji osieroconych (orphan removal)
Czym są encje osierocone. Jak tego unikać. Element orphanRemoval. Adnotacje @Embeddable i @Embedded.
Kontynuujemy temat relacji ale tym razem skupiamy się na dodatkowych obszarach. Analizujemy co się stanie gdy odłączymy encję w relacji w ten sposób, że nie będzie
miała kontaktu z inną encją, przez co stanie się encją osieroconą. Pokazujemy jak temu zaradzić i dlaczego warto zastosować podane rozwiązanie.
W drugiej części rozdziału pokazujemy również w jaki sposób wyodebniać fragmenty encji do klasy, którą później osadzamy w tej encji.
Tłumaczymy jakie są zalety, a jakie wady tego rozwiązania.
-
Hibernate -
Single Table Inheritance
Dziedziczenie encji vs jedna tabela w bazie danych. Adnotacja @DiscriminatorColumn i @DiscriminatorValue. Parametr typu w repozytorium.
Na deser pozostawiliśmy kwestię dziedziczenia encji i odwzorowanie tego dziedziczenia w bazie. Na pierwszy ogień wzięliśmy odwzorowanie do jednej tabeli.
Dowiesz się tutaj jak sprawić, by kilka encji dziedziczącyh wskazywało na jedną tabelę w bazie. Wyjaśnimy pojęcie kolumny dyskryminatora oraz pokażemy dokładnie ja wygląda taki zapis w bazie danych.
-
Hibernate -
Table Per Class Inheritance
Dziedziczenie encji a wiele tabel w bazie. Adnotacja @Inheritance i typ TABLE_PER_CLASS.
W ostatnim rozdziale pokazujemy jak można zaimplementować dziedziczenie, by zostało odzwierciedlone klasa po klasie w osobnych tabelach w bazie.
Pokazujemy dokładnie różne metody pobierania danych, tak by otrzymywać różne listy wyników w zależności od wykonanego zapytania.
Wyjaśniamy też dlaczego postanowiliśmy pominąć mapowanie dziedziczenia o typie JOINED.
Wymagania do tego kursu:
-
Dobra znajomość Javy.
-
Podstawowa znajomość Mavena.
-
Podstawowa znajomość baz danych.
Appa Notka.
Jeśli interesują Cię zagadnienia takie jak Hibernate, możesz być również zainteresowany(a) naszym Kursem Javy 8 do 17 i dalej.
Zawarliśmy w nim aż 150 przykładów z dokładnym wytłumaczeniem. Wśród nich znajdziesz nie tylko podstawową wiedzę o strumieniach,
wyrażeniach lambda i interfejsach funkcyjnych, ale także dokładne objaśnienia dotyczące różnych trudniejszych metod,
na przykład reduce, czy merge.
Solidne opanowanie zagadnień przedstawionych w Kursie Hibernate jest kluczem do programowania aplikacji bazodanowych.
Wszystkie tematy są ważne i dlatego polecamy dokładnie przeanalizować zgromadzone tutaj materiały.
W ramach tego kursu przedstawiliśmy wszystko, czego używaliśmy i używamy w komercyjnych projektach w trakcie naszej pracy z Hibernatem.
Wiele z tych zagadnień pojawia się również na rozmowach kwalifikacyjnych.