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.
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.
Nie jest wymagana znajomość języka zapytań SQL, Hibernate opiera się na prostej strukturze manipulowania właściwościami obiektów poprzez wzorzec JavaBeans.
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.
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.
@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();
}
}
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