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.


Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.