Na warsztat trafia ORM, JPA i Hibernate w ramach cyklu Fundamenty JPA i Hibernate. Co kryje się za skrótem ORM i JPA i właściwie czym jest Hibernate?
W ekosystemie Javy w temacie persystencji danych mamy takie trzy najpopularniejsze hasła – dwa skróty i jedną nazwę framework’a – ORM, JPA i Hibernate.
Object-Relational Mapping
ORM to (Object-Relational Mapping) Mapowanie Obiektowo-relacyjne, w którym chodzi o to, że paradygmant obiektowy w relacyjnych bazach danych nie zawsze można odwzorować jeden do jednego. Innymi słowy – nie zawsze wszystkie nasze obiekty z aplikacji da się łatwo przenieść do bazy danych. Nie zawsze też jest to pożądane.
Powyżej widzisz prosty obiekt z Name i Age, który łatwo przenieść do tabeli w bazie danych. W tym wypadku wrzucamy cały obiekt jako kolejny wiersz tabeli. Pole Name ląduje w kolumnie Name, pole Age w kolumnie Age.
Natomiast już nie tak prosto odwzorować to w tabeli gdy w grę wchodzą interfejsy, abstrakcje, wielopoziomowe dziedziczenie i gdy relacje są trochę bardziej skomplikowane.
Podam przykład takiej skomplikowanej relacji, żeby łatwiej było sobie uświadomić skalę trudności.
Mamy klasy Rezerwacja, która posiada dwa obiekty Gość i zarezerwowany Pokój. Rezerwacja może mieć odnośnik do Gość i odnośnik do Pokój. Tak powiązane obiekty ORM przekłada na trzy tabele: Rezerwacja, Gość i Pokój, które są połaczone ze soba wzajemnymi relacjami. Może też mieć połączenie w Javie w drugą stronę – Gość może mieć połaczenie z aktualną Rezerwacją. Tak samo Pokój – może mieć podpiętą aktualną Rezerwację lub aktualnego Gościa. Takich połączeń, które w świecie obiektowym są dosyć proste, logiczne i popularne jest wiele. By przedstawić je jasno w świecie relacyjnym potrzebujemy wielu dodatkowych tabel, wielu dodatkowych kolumn itd. Już przy problemach średniego rozmiaru staje się to bardzo skomplikowane, a co dopiero w większej skali.
Skrót ORM nie jest natywny dla Javy – w każdym języku programowania mamy jakiegoś ORMa. Jest to ogólne określenie bibliotek, które zarządzają mapowaniem obiektów na relacyjne bazy danych.
Java Persistence API
Natomiast przechodząc już stricte do świata Javy natykamy się na JPA (Java Persistence API). Jest to konkretny standard dla Javy, który ma dokładnie określać przebieg komunikacja między programem w Java i bazą danych, jak ma przebiegać mapowanie itd.
JPA to tylko standard – tak na prawdę tylko zbiór interfejsów, które mówią jakie metody maja być zaimplementowane. Określa, jakie one mają parametry, co mają zwracać i robić. Natomiast potrzebujemy implementacji tego standardu i tu wchodzi Hibernate.
Hibernate
Hibernate to biblioteka czyli implementacja standardu JPA. Nie jest to jedyna implementacja jednak jest bez wątpienia najpopularniejsza. Ponad to ma wiele dodatkowych funkcjonalności, które w standardzie JPA nie są określone – na przykład posiada zestaw funkcji, które służą do komunikacji z bazą NoSQLową. Standard JPA tego nie określa, bo on zajmuje się tylko komunikacją z relacyjnymi bazami danych.
Podsumowanie
ORM – (Object-Relational Mapping) to ogólne określenie bibliotek, które zarządzają mapowaniem obiektów na relacyjne bazy danych, nie jest natywny dla Javy.
JPA – (Java Persistence API) to konkretny standard dla Javy, który ma dokładnie określać przebieg komunikacja między aplikacją i bazą danych.
Hibernate – to biblioteka czyli implementacja standardu JPA.
By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.
Informacje oparte zostały o materiał darmowego kursu wprowadzającego w świat JPA i Hibernate „Fundamenty JPA i Hibernate” dostępnego w formie wideo na platformie ClockworkJava.
Hej :)!
Gratuluję Ci bardzo fajnego bloga :).
Odkryłam go w ubiegłym miesiącu i na pewno będę do Ciebie wracać, bo lektura Twoich wpisów jest nie tylko pożyteczna i pomaga mi ułożyć sobie wiedzę w głowie, ale jest tu zwyczajnie sympatycznie :).
Jestem obecnie na etapie ćwiczenia relacyjnych baz danych oraz zapoznawania się z Hibernate i Spring i Twoje wpisy są zdecydowanie najczytelniejszymi objaśnieniami w polskim Internecie.
Piszesz zwięźle, ale ciekawie, co jest dużym atutem i nie lada wyzwaniem przy opisywaniu technicznych zawiłości. Kto powiedział, że informatyka musi być nudna? Można pisać ciekawym, żywym językiem, bez infantylizacji, a tak by być zrozumianym przez odbiorców na różnym poziomie zawansowania– Tobie to bardzo dobrze wychodzi :)!
Na duży plus poczytuję sobie również szatę graficzną Twojej witryny. Jest wizualnie przyjemna dla oka(również wybrane czcionki), ale nie cukierkowa, a połączenie kolorów i układ graficzny elementów na stronie ułatwiają koncentrację. Chapeau bas!
Projekt bardzo dobry, a może być jeszcze lepszy!
Brakuje nieco proofreading.
W tym wpisie widzę, że na grafice ilustrującej czym jest ORM (pierwsza grafika w wpisie), w kolumnie „Age” pomyłkowo umieściłeś nazwisko.
Zdarzają Ci się również błędy językowe jak w poniżej zacytowanym fragmencie, gdzie źle odmieniłeś słowo „komunikacja”.
„Jest to konkretny standard dla Javy, który ma dokładnie określać przebieg komunikacja między programem w Java i bazą danych, jak ma przebiegać mapowanie itd.”
W powyżej przytoczonym cytacie można by również uczynić odbiór tekstu jeszcze płynniejszym dla czytelnika dodając słowo „czyli” po ostatnim przecinku.
Pozdrawiam Cię autorze i czekam na nowe wpisy 🙂