background image

Wdrożenie do projektu

Zaczynamy od stworzenia zwykłego projektu Java. Środowisko z jakiego korzystam to Netbeans 
IDE w wersji 8.1. Możesz wykorzystywać inne IDE, bylebyś stosował analogiczne kroki w swoim 
środowisku.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    1/12

background image

Musimy do projektu dodać niezbędne biblioteki. W tym celu wybieramy właściwości projektu i 
przechodzimy do sekcji Libraries. Następnie klikamy Add Library:

Powinno nam się pojawić takie okienko:

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    2/12

background image

W tym przykładzie będę korzystał z konta HR umieszczonego w bazie danych Oracle. Będzie mi w 
związku z tym potrzebna biblioteka do łączenia się z tą bazą.  Pobierz plik ojdbc6 lub ojdbc7 z 
internetu i umieść go w strukturze plików projektu. Ja po prostu dorobiłem podkatalog libs i 
umieściłem w nim wspomniany plik jar.

Gdy umieścimy już plik we właściwym miejscu, ponownie wchodzimy do właściwości projektu i 
dodajemy nowo wrzuconego liba do zależności. Tym razem klikamy jednak nie "Add Library" a 
"Add Jar/Folder" i z systemu plików wybieramy wrzucony plik.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    3/12

background image

Konto z którego korzystam (HR) jest domyślnie utworzone w bazie jeśli zainstalujesz bazę Oracle 
w wersji Express Edition. To dosyć lekka wersja bazy, choć pozbawiona części funkcjonalności. Na
nasze potrzeby całkiem starczy. Pamiętaj by odblokować konto HR i ustawić dla niego hasło. W 
internecie nie brakuje instrukcji jak to zrobić. Potrzebujemy teraz pliku konfiguracyjnego który 
poda Hibernate'owi informacje niezbedne do podpiecia się do bazy. Tworzymy więc pusty plik o 
nazwie hibernate.cfg.xml (tak właśnie musi się nazywać) w domyślnym pakiecie:

Jego zawartość powinna wyglądać mniej więcej tak:

Zmień własności username, password i url jeśli Twoja baza znajduje się na zdalnym serwerze lub 
korzystasz z innego użytkownika w bazie. Zwróć szczególną uwagę na zapis "mapping resource" 
znajdujący sięw tym pliku:

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    4/12

background image

Jest to ścieżka względna (od położenia pliku hibernate.cfg.xml) prowadząca do pliku mapowania 
encji.  Mapować encje na tabele możesz z użyciem plików XML lub adnotacji. W tym tutorialu 
wykorzystuję głównie pliki XML (uważam taką strukturę za bardziej czytelną). W tym pliku 
mapowania znajdują się informacje na temat tego w jaki sposób on ma przekładać obiektową 
strukturę klas na relacyjną i płaską strukturę tabel. Ilekroć więc będziesz chciał korzystać z nowej 
tabeli musisz taki plik stworzyć i dodać do niego link w tym miejscu. U mnie ta ścieżka jest dosyc 
długa, ale wynika to ze struktury obiektu. Każda podsekcja nazwy pakietu to podkatalog:

Przy okazji zwróć uwagę na to co i gdzie się znajduje, może to być dla Ciebie ściąga gdybyś nie 
wiedział gdzie jaki plik umieścić. 
Stwórz teraz klasę HibernateUtil (możesz nazwać ją jak chcesz, tylko będziesz potem musiał 
zmienić nazwę klasy w przykładach). Jest to klasa będąca tzw fabryką  sesji, a służąca temu byśmy 
mieli zawsze aktywną sesję pomiędzy naszą aplikacją a bazą danych. Jest to kod szablonowy. W 
zasadzie możesz go skopiować do swojego projektu bez zmian.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    5/12

background image

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    6/12

background image

Podstawowe mapowanie tabeli

W pierwszym przykładzie będziemy mapować tabelę EMPLOYEES ze schematu HR. To lista 
fikcyjnych pracowników fikcyjnej firmy. Mamy tutaj 3 klucze obce (kolumny 
job_id,manager_id,department_id) i zazwyczaj oznaczałoby to że obiekt klasy EMPLOYEE 
zawierał będzie jakieś trzy obiekty (np. JOB, MANAGER, DEPARTMENT), ale żeby nie 
wprowadzać na razie zbytniej komplikacji, zamapujemy te pola jak zwykłe pola liczbowe. Potem 
wraz z rozwojem projektu zmienimy to na właściwą strukturę.

Tworzymy w projekcie klasę Employee której obiekty będą reprezentowały pojedyncze wiersze z 
tabeli Employees. Dla każdej kolumny w tabeli stwórz odpowiadające mu typem (nazwą 
niekoniecznie) pole w klasie. 

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    7/12

background image

Gdy już będziesz miał wszystkie pola stwórz gettery i settery. Hibernate będzie domyślnie szukał 
takich metod by dostać się do pól obiektu, a więc musisz je posiadać. Mamy gotowy automat w 
Netbeansie który zrobi to za nas. Należy wybrać odpowiednią opcję z menu dostępnego pod PPM:

Wyświetli się okno podobne do poniższego. Naciśnij "Select All" i zatwierdź wybór.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    8/12

background image

Metody te zostaną utworzone i będą wyglądać mniej więcej tak:

Warto też dodać przeciążoną metodę toString. W dalszej części będziemy na konsoli wyświetlać 
pobrane z bazy dane i wtedy ta metoda nam się przyda.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    9/12

background image

Klasa jest już  gotowa, teraz czas na wspomniany wcześniej plik mapowania klasy. Stwórz plik 
XML w tym samym miejscu w którym znajduje się odwzorowywana klasa i umieść w nim treść 
taką jak poniżej. 
Linia 5 określa nazwę pakietu w którym Hibernate domyślnie będzie szukał klas do mapowania. W 
tym projekcie dla każdej klasy tworzę osobny plik do mapowania, nic nie stoi jednak na 
przeszkodzie by mapować wiele klas w jednym pliku. W takie sytuacji osobne wskazanie pakietu 
ułatwi nam życie. Linia 6 określa klasę którą chcemy mapować oraz odpowiadającą jej tabelę. Linie
7-9 określają klucz główny tabeli, oraz sposób jego uzupełniania. W linii 7 podajemy nazwę pola 
która będzie odpowiednikiem kolumny z kluczem głównym, typ tego pola, oraz odpowiadającą mu 
kolumnę. W linii 8 określone jest w jaki sposób klucz główny ma być uzupełniany danymi. W 
takim ustawieniu jak teraz będzie wymagane wypełnianie klucza danymi przed wysłaniem obiektu 
do zapisania. Jest tu kilka innych możliwości, jednak zajmiemy się nimi nieco później. Linie 10-19 
to mapowania poszczególnych pól klasy na kolumny w tabeli. Nie musisz mapować wszystkich 
kolumn.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    10/12

background image

Tworzenie podstawowego dao i jego wykorzystanie

W projekcie utwórz teraz klasę EmployeeDao (nazwa dowolna). Klasa ta będzie zawierała metody 
służące pobieraniu danych z bazy i ewentualnemu ich utrwalaniu, aktualizowaniu czy kasowaniu. 
Metoda z linii 20-29 powoduje odczytanie z bazy całej zawartości tabeli employees i zwrócenie jej 
w postaci listy obiektów. Linia 23 powoduje odebranie działającej sesji z fabryki sesji, w ramach 
której będziemy uruchamiać nasze rządania. Linia 24 zawiera element "from Employee". Jest to 
zapytanie napisane w obiektowej implementacji SQL wprowadzanej przez Hibernate tj HQL. W 
składni tego języka nie piszemy SELECT [kolumny] jak bysmy to zrobili w zwykłym SQL, 
ponieważ domyślnie przyjmowane jest że będziemy czytać całą szerokość wiersza. To oczywiście 
utrudnia późniejsze ewentualne prace optymalizacyjne na bazie, jednak tym na razie się nie 
przejmuj. From Employee określa nazwę klasy której obiekty chcemy wczytać. Zwróć uwagę że 
podajemy tutaj nazwę klasy której encje chcemy odczytać, a nie nazwę tabeli!!. Nie ma tutaj 
żadnych warunków filtracji – ewentualne określilibyśmy z użyciem klauzuli WHERE. W liniach 
31-36 jest przykładowa metoda służąca zapisowi nowego obiektu do bazy. Będzie nam potrzebna 
nieco później. Na ten moment nie musisz jej tworzyć.

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    11/12

background image

Uruchomienie projektu

Mamy już wszystkie elementy niezbędne do uruchomienia naszego projektu. Aby przetestować 
działanie naszego systemu dorobimy sobie osobną klasę uruchamiającą cały ten bałagan. Jej 
jedynym zadaniem jak widać poniżej jest przeiterowanie po liście obiektów klasy Employee 
zwracanej z metody naszego DAO i wyświetlenie ich zawartości na konsoli.

Po uruchomieniu powinniśmy zobaczyć na konsoli taki efekt:

Hibernate  tutorial  - Andrzej Klusiewicz  -  

www.jsystems.pl

                                                    12/12


Document Outline