Baza Wiedzy

Hibernate

hibernate logo

Czym jest Hibernate?🔗

Hibernate jest najpopularniejszą biblioteką służącą do mapowania obiektowo-relacyjnego w Javie (ORM / Object Relational Mapping). Powstała w 2001 z inicjatywy Gavina Kinga, który w późniejszych latach w dużym stopniu przyczynił się do wprowadzenia istotnych zmian do specyfikacji EJB oraz JPA, doprowadzając je do stanu, w którym znamy je obecnie.

Jeżeli czytasz ten artykuł, to na początku zaznaczę, że nie będzie on miał formy tutoriala, a raczej omówienia możliwości i tego co daje Hibernate.

Jeżeli programujesz w Javie od dłuższego czasu (co najmniej kilku miesięcy) to możliwe, że zetknąłeś się już z komunikacją z bazami danych z poziomu kodu Javy. Podstawowym interfejsem, który daje nam taką możliwość jest JDBC z klasami takimi jak Statement, czy PreparedStatement, dzięki którym możemy wykonywać zapytania SQL na dowolnej bazie relacyjnej.  Z jednej strony klasy te dają nam dużą swobodę, ponieważ możemy dzięki nim skonstruować i wykonać dowolne zapytanie, jednak z drugiej strony niosą konieczność pisania dużej liczby powtarzalnego kodu, związanego głównie z mapowaniem wyników zwracanych przez zapytanie na faktyczne obiekty Javy.

Problem ten obecnie można w dużej mierze rozwiązać wykorzystując Spring JDBC - bibliotekę z uniwersum Springa, która pozwala nam w wygodny sposób definiować mappery z wyników zapytań na obiekty Javy, lub uzupełniać parametry zapytań automatycznie na podstawie nazw pól klasy. Nadal nie jest to jednak rozwiązanie idealne, ponieważ musimy się trudzić z ręcznym budowaniem zapytań SQL, które często będą się powtarzały, szczególnie jeśli mówimy o podstawowych zapytaniach CRUD (Create, Read, Update, Delete).

Hibernate jest rozwiązaniem wszystkich tych problemów, więc w skrócie pozwala on automatycznie mapować obiekty Javy na wiersze w bazie danych oraz odczytywać rekordy z bazy danych i automatycznie tworzyć z nich obiekty. Na dobrą sprawę wykorzystując Hibernate teoretycznie nie musimy mieć większego pojęcia o poprawnym konstruowaniu zapytań w języku SQL, ponieważ będą one budowane za nas.

Obecnie Hibernate to coś dużo bardziej rozbudowanego niż tylko pośrednik pomiędzy Javą a bazą danych. Oprócz podstawowych możliwości ORM znajdziemy tutaj także osobny moduł odpowiedzialny za wyszukiwanie pełnotekstowe w oparciu o silnik Apache Lucene (Hibernate Search) oraz rozszerzoną implementację specyfikacji Bean Validation (Hibernate Validator).

Hibernate a JPA (Java Persistence API)🔗

JPA jest specyfikacją Javy EE do mapowania obiektowo-relacyjnego. Co to oznacza, że jest specyfikacją? Ano tyle, że nie jest to żadna biblioteka, a jedynie zbiór definicji i interfejsów, stworzonych przez grono ekspertów (m.in. przez autora Hibernate, czyli Gavina Kinga), której celem było wprowadzenie do Javy (szczególnie EE) standardu mapowania obiektowo relacyjnego. Specyfikacja JPA 2.0 (i obecnej 2.1) w dużej mierze oparta jest o najlepsze elementy wyniesione z Hibernate właśnie. Dwie główne implementacje JPA to obecnie Hibernate (zdecydowany lider jeśli chodzi o popularność) oraz Eclipse Link rozwijany przez fundację Eclipse.

HQL / JPQL🔗

Hibernate udostępnia 4 podstawowe metody pozwalające wykonywać proste zapytania CRUD na obiektach encji. Oczywiście w realnym świecie takie podstawowe operacje niemal nigdy nie są wystarczające. Z pomocą przychodzi język specjalny język zapytań HQL (Hibernate Query Language) lub jego ustandaryzowana wersja JPQL (Java Persistence Query Language). Są to języki mocno zbliżone do SQL, jednak nie operujemy w nich na tabelach, a zamiast tego posługujemy się notacją obiektową.

Criteria API🔗

Criteria API jest kolejnym sposobem budowania bardziej zaawansowanych zapytań do bazy. Przypadnie on do gustu wszystkim osobom, które nie przepadają za językiem SQL i jemu podobnymi. Criteria API pozwala wykonać niemal dowolną operację na bazie danych wykorzystując jedynie notację obiektową, tzn. tworząc w programie odpowiednie obiekty i wywołując na nich odpowiednie metody.

Czego potrzebujesz na start?🔗

Teoretycznie możesz pobrać odpowiednie pliki .jar i dołączyć je do swojego projektu i bez zacząć przygodę z mapowaniem obiektowo relacyjnym. W praktyce jest ich tak wiele, że ręczne ich zarządzanie, szczególnie w przypadku zmiany wersji, jest zwyczajnie zbyt kłopotliwe. Zanim zaczniesz przygodę z Hibernate należy więc poznać jedno z dwóch narzędzi pozwalających zarządzać zależnościami:

    • Maven

    lub

      • Gradle

      Ponieważ wpis ten z założenia nie jest tutorialem powiemy tu jedynie, że obecne wersje Hibernate minimalizują do minimum konfigurację XML. Najczęściej jedynym plikiem konfiguracji, który będziesz stosował w swoich aplikacjach będzie persistence.xml, w którym umieszczone będą rzeczy takie jak adres URI oraz dane logowania do bazy danych. Dalej możesz przejść do definiowania klas modelu danych opatrzonych odpowiednimi adnotacjami i zapisywaniu ich w bazie danych.

      Historia wersji🔗

      Hibernate istnieje na rynku już od ponad 10 lat, historia wersji wygląda następująco:

        • 2001 - Hibernate 1.0

        • 2003 - Hibernate 2.0

        • 2005 - Hibernate 3.0

        • 2011 - Hibernate 4.0

        • 2015 - Hibernate 5.0

        Obecnie biblioteka jest rozwijana przez firmę Red Hat. Biblioteka rozwijana jest także dla platformy .NET Microsoftu pod nazwą NHibernate.

        Najlepszy newsletter o Javie w Polsce

        Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

        Nikomu nie udostępniamy Twojego maila, a jeśli zechcesz to w każdej chwili możesz się wypisać.

        Komentarze do artykułu

        Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.