Co to jest Hibernate?

Hibernate znacznie ułatwia życie programistom poprzez wbudowane mechanizmy automatyzujące operacje na relacyjnych bazach danych.

Hibernate jest open sourcowym projektem, którego celem było stworzenie nowego podejścia do łączenia się z bazą danych oraz wykonywania na niej operacji minimalizując tym samym ilość pisanego kodu. Szeroki wachlarz jego mozliwości sprawia, że jest on badzo często wykorzystywany w dużych aplikacjach webowych opartych na relacyjnych bazach danych (SQL), w których możemy w pełni wykorzystać potencjał tego frameworka. Najbardziej charakterystyczną cechą, dzięki której Hibernate zyskuje cały czas na popularności jest wykorzystywany przez niego standard JPA, czyli model mapowania obiektowo-relacyjnego.

Czym jest mapowanie obiektowo-relacyjne?

Dzięki temu standardowi Hibernate jest w stanie odwzorować obiekty zadeklarowane przy pomocy obiektowego języka programowania (np. Java), na całą architekturę konkretnej bazy danych. Pola i klasy, które utworzymy w projekcie możemy w bardzo prosty sposób zmapować. Najczęstszym sposobem mapowania, dzięki któremu Hibernate będzie wiedział jakie klasy i atrybuty odpowiadają jakim tabelom i kolumnom w bazie danych, są adnotacje. Jednak daną klasę możemy również zmapować w pliku konfiguracyjnym XML.

Zalety Hibernate

PEŁNA WYGODA

Nie jest wymagana znajomość języka zapytań SQL, Hibernate opiera się na prostej strukturze manipulowania właściwościami obiektów poprzez wzorzec JavaBeans.

AUTOMATYZACJA

Operacjne na bazach danych wykonuje się w bardzo intuicyjny i prosty sposób. Hibernate sam wykryje, które obiekty zmieniły swoje właściwości, a dzięki wcześniejszemu mapowaniu dopasuje je do odpowiednich tabel i kolumn w bazie danych.

KOMPATYBILNOŚĆ

Pełna kompatybilność i szerokie wsparcie dla baz danych opartych o SQL jak i NoSQL. Ponadto dla osób dobrze czujących się w zapytaniach SQL jest możliwość wykonywania natywnych zapytań napisanych w tym języku.

Elementy Hibernate

  • Hibernate ORM: Podstawowy moduł Hibernate odpowiedzialny za mapowanie obiektowo relacyjne.
  • Programowanie obiektowe: Na tym paradygmacie jest oparty cały sens mapowowania obiektowo-relacyjnego, obiekty są tutaj zbiorem danych, które później Hibernate odpowiednio interpretuje i przekazuje informacje do bazy danych o tabelach i kolumnach, do których mają trafić dane.
  • Wsparcie baz danych: Pomimo tego, że Hibernate głównie wspiera bazy danych wykorzystujące składnię SQL, to jednak twórcy nie zapomnieli o bazach danych NoSQL, takich jak MongoDB
  • Wbudowana walidacja: Wprowadzane dane często muszą spełniać jakies warunki dotyczące np. minimalnej i maksymalnej ilości znaków, lub ich rodzaju, moduł Hibernate Validator umożliwia nam narzucenie z góry tych warunków.
  • Indeksowanie obiektów Niektóre rodzaje aplikacji, jak np. sklep internetowy, bardzo ułatwiają życie użytkownikom, kiedy mogą oni wyszukać produkt po jakiejkolwiek informacji dotyczącej konkretnego produktu. Idealnym sposobem do rozwinięcia takiej funkcjonalności jest Hibernate Search. Moduł ten pomaga zindeksować dany obiekt tak, aby można było go wyszukać po każdej informacji zawartej w tym obiekcie.
<

HIBERNATE W PRAKTYCE


@Entity
@Table(name="person");
public class Person {
        
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="personid");
private Long id;
          
@Column(name="name");
private String name;
          
@Column(name="lastname");
private String lastName;
          

public void setId(Long id) { this.id = id; }
          
public Long getId() { return id; }   
          
public void setName(String name) { this.name = name; }
          
public String getName() { return name; }
          
public void setLastName(String lastName) { this.lastName = lastName; }
          
public String getLastName() { return lastName; }
      

public class Main {
        
public static void main(String[] args){
          
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("nazwa_pliku_konfiguracyjnego");
EntityManager entityManager = entityManagerFactory.createEntityManager();
          
entityManager.getTransaction().begin();
          
Person p = new Person();
p.setName("Jan");
p.setLastName("Kowalski");  
          
entityManager.persist(p);
          
entityManager.getTransaction().commit();
          
   }                
}         
          
      

ADNOTACJE

W połączeniu z bazą danych z użyciem Hibernate kluczową rolę odgrywają wcześniej już wspomniane adnotacje. Oto kilka najważniejszych z nich:

@Entity - czyli encja, inaczej reprezentacja obiektowa danej tabeli, którą chcemy zmapować

@Table - jak sama nazwa wskazuje, definiuje za jaka tabelę odpowiada klasa

@Column - podobnie jak z tabelą, ta adnotacja mówi nam o kolumnie, do której przypisane jest dane pole

@Id - podpowiada, które pole jest jednocześnie kluczem głównym w bazie danych

@OneToMany - dane pole ma relacje i jest częścią innej encji

@ManyToOne - podobnie jak wyżej, jednak tą adnotacją się oznacza struktury danych jak np. zbiór zamówień

@JoinColumn - używana razem z dwoma powyższymi adnotacjami precyzuje jakie dokładnie relacje występują między encjami

Przydatne linki