Hibernate dla początkujących – prosta aplikacja bazodanowa

W tym artykule przedstawiam Hibernate dla początkujących programistów języka Java. Hibernate to bardzo popularne podejście do programowania aplikacji bazodanowych w języku Java wykorzystujące mapowanie obiektowo-relacyjne (Object-Relational Mapping, ORM). Jest to naturalna kontynuacja podstawowego podejście do programowania aplikacji bazodanowych opartego na wykorzystaniu interfejsu Java DataBase Connectivity (JDBC).

Mapowanie obiektowo-relacyjne (Object-Relational Mapping, ORM)

Wykorzystanie interfejsu JDBC umożliwia komunikację z bazą danych, ale zmusza programistę do żmudnego przekształcania danych pobieranych z postaci relacyjnej opartej na tabelach do postaci obiektowej opartej na obiektach, a danych zapisywanych – z postaci obiektowej do postaci relacyjnej. W przypadku większych aplikacji o bardziej rozbudowanej strukturze staje się to bardzo nieefektywne. Mapowanie obiektowo-relacyjne (Object-Relational Mapping, ORM) umożliwia automatyzację takich przekształceń i bardziej efektywną współpracę z bazami danych.

Framework Hibernate

Popularnym rozwiązaniem umożliwiającym mapowanie obiektowo-relacyjne jest wykorzystanie frameworku Hibernate. Umożliwia on tworzenie aplikacji bazodanowych w języku Java, w których programiści nie wykonują operacji bezpośrednio na bazie danych w języku SQL, lecz jedynie operują na klasach i obiektach języka Java, które są automatycznie tłumaczone na operacje bazodanowe przez framework Hibernate na podstawie wcześniej zdefiniowanych zależności między używanymi klasami języka Java a istniejącymi tabelami w bazie danych. Chociaż Hibernate dla początkujących programistów może wydawać się dość skomplikowany, warto zamienić na niego podstawowe rozwiązanie z interfejsem JDBC.

Jak zainstalować Hibernate ?

Framework Hibernate można pobrać ze strony http://hibernate.org/orm/. Dodatkowo potrzebny jest odpowiedni sterownik JDBC do komunikacji z serwerem baz danych, zależny od rodzaju używanego serwera. Sterowniki takie można zazwyczaj znaleźć na stronach producentów oprogramowania serwerów baz danych, na przykład na stronie http://dev.mysql.com/downloads/connector/j/ dla bazy danych MySQL lub na stronie https://jdbc.postgresql.org/ dla bazy danych PostgreSQL. Pobrane pliki należy udostępnić kompilatorowi języka Java (w zależności od używanego środwiska i jego konfiguracji może to wymagać różnych działań).

Jak skonfigurować Hibernate ?

Konfiguracja Hibernate wykonywana jest na potrzeby konkretnej aplikacji bazodanowej w języku Java. Polega na stworzeniu pliku hibernate.cfg.xml i dołączeniu go do aplikacji. Przykładowy plik konfiguracyjny przedstawiam poniżej.

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

	<session-factory>

		<!-- Database connection settings -->
		<property name="connection.driver_class">org.postgresql.Driver</property>
		<property name="connection.url">jdbc:postgresql://localhost:5432/postgres</property>
		<property name="connection.username">postgres</property>
		<property name="connection.password">iProgramujesz.pl</property>

		<!-- JDBC connection pool (use the built-in) -->
		<property name="connection.pool_size">1</property>

		<!-- SQL dialect -->
		<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

		<!-- Disable the second-level cache  -->
		<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

		<!-- Echo all executed SQL to stdout -->
		<property name="show_sql">false</property>

		<!-- Drop and re-create the database schema on startup -->
		<property name="hbm2ddl.auto">update</property>

		<mapping resource="pl/iprogramujesz/tutorial/database/hibernate/Person.hbm.xml"/>

	</session-factory>

</hibernate-configuration>

Jak używać Hibernate ?

Przed użyciem Hibernate należy przygotować definicję zależności używanymi klasami języka Java a istniejącymi tabelami w bazie danych. Konfiguracja Hibernate dla początkujących programistów może opierać się wyłącznie na plikach konfiguracyjnych .xml. Przykładowy plik konfiguracyjny określający zależność między klasą Author w języku Java a tabelą author w bazie danych przedstawiam poniżej.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="pl.iprogramujesz.tutorial.database.hibernate">

	<class name="Author" table="AUTHOR">
		<id name="id" column="ID">
			<generator class="native"/>
		</id>
		<property name="name" column="NAME"/>
	</class>

</hibernate-mapping>

Tabela author w bazie danych ma dwie kolumny: kolumnę o nazwie „id” przechowującą dane typu int oraz kolumnę o nazwie „name” przechowującą łańcuchy znaków. Tabela ta odpowiada klasie Author w języku Java, która ma dwa pola: id typu int oraz name typu String. Przykładową definicję klasy Author przedstawiam poniżej.

public class Person {
	private int id;
	private String name;

	public Person() {
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

Framework Hibernate będzie tłumaczył pobierane wiersze z tabeli author na obiekty klasy Author oraz zapisywane obiekty klasy Author na wiersze tabeli author zwalniając programistę z konieczności żmudnego odczytywania zawartości poszczególnych wierszy otrzymywanych w ResultSet przy użyciu JDBC i żmudnego konstruowania instrukcji SQL zapisujących poszczególne wiersze do tabeli.

Hibernate dla początkujących - środowisko programistyczne Eclipse

Hibernate dla początkujących: prosta aplikacja bazodanowa

Prosta aplikacja bazodanowa w języku Java wykorzystująca framework Hibernate dla początkujących do komunikacji z bazą danych jest przedstawiona poniżej (kod przedstawia główną klasę tej aplikacji, pliki konfiguracyjne hibernate.cfg.xml oraz author.xml, jak również definicja klasy Author, były przedstawione wcześniej).

package pl.iprogramujesz.tutorial.database.hibernate;

import org.hibernate.*;
import org.hibernate.cfg.*;

class DatabaseApplication {

	static void main(String[] args) {
		SessionFactory sessionFactory = new Configuration()
        .configure() // configures settings from hibernate.cfg.xml
        .buildSessionFactory();

		Session session = sessionFactory.openSession();
		session.beginTransaction();

		Person person = (Person) session.load(Person.class, new Integer(1));
		if(person != null)
			System.out.println(person.getName());

		session.close();
		sessionFactory.close();
	}
}

Hibernate dla początkujących: krok po kroku

Używanie Hibernate dla początkujących programistów języka Java nie musi być trudne. Pierwszym krokiem jest pobranie i zainstalowanie pakietów. Drugim krokiem jest zdefiniowanie plików konfiguracyjnych z mapowaniem obiektowo-relacyjnym. Ostatnim krokiem jest wykorzystanie obiektów stworzonych klas w kodzie w języku Java.