1 Konfiguracja HIBERnate, postgresQL + przykładowa aplikacjaInstalacja Konfiguracja HIBERnate, postgresQL + przykładowa aplikacja
2 Tutorial ten będzie przeprowadzony w środowisku WindowsUżyte IDE - IntelliJ
3 Wymagania wstępne Zainstalowany JDK
4 PostgreSQL Pobieramy PostgresSQL dla Windows Link zawiera również PgAdmin – graficzny interfejs dla PostgreSQL
5 Instalujemy ściągnięte oprogramowanie
6 Wybieramy lokalizację
7 Wybieramy lokalizację, gdzie będziemy składować dane
8 Tworzymy hasło dla superuser’a – postgres (będzie potrzebne przy konfiguracji Hibernate’a). W naszym przypadku hasło zostanie ustalone na „postgres”
9 Wybieramy numer portu na którym będzie nasłuchiwał serwerWybieramy numer portu na którym będzie nasłuchiwał serwer. W naszym przypadku 5432 (również będzie to potrzebne przy konfiguracji Hibernate)
10 Wybieramy domyślną lokalizację
11 Klikamy dwa razy Next i instalujemy PostgreSQL
12 Po zakończeniu instalacji, możemy przejść do PgAdminIII, który został również zainstalowany – graficzny interfejs
13 Klikamy dwukrotnie na (localhost:5432)Klikamy dwukrotnie na (localhost:5432). Podajemy hasło, które wprowadziliśmy podczas instalacji. W naszym przypadku: postgres
14 Tworzymy nową bazę danych
15 Nadajemy jej nazwę i OK
16 Mamy założoną bazę danych. Jest na razie pusta.
17 Aplikacja w Javie Kolejnym krokiem będzie stworzenie aplikacji w Javie, używającej Hibernate. Należy poprawnie skonfigurować Hibernate – jak na kolejnych slajdach Projekt zostanie utworzony w IntelliJ IDE
18 Tworzmy nowy projekt – Java Module
19 Mamy utworzony pusty projekt
20 Jak widać stworzyliśmy dwa moduły:Stwórzmy strukturę plików jak niżej. Na razie wszystkie pliki są puste. Zawartość uzupełnimy później Jak widać stworzyliśmy dwa moduły: Application – w którym będzie logika naszej aplikacji Persistance – w której zamodelujemy klasy, które będą persystowane (Message, Thread) Do budowy oraz do pobrania niezbędnych bibliotek będziemy używać Maven’a, stąd też stworzone pliki pom.xml (po jednym dla każdego z modułów oraz jeden nadrzędny). Na kolejnych slajdach zaprezentujemy ich zawartość
21 Moduł application – pom.xmlDependency: Postgresql – driver JDBC Dom4j – hibernate-core go używa Pl.agh.hibernate.tutorial: persistance – moduł persystencji zawierający modelowane klasy
22 Moduł persistance – pom.xmlDependency: Hibernate-core – główna biblioteka hibernate, odpowiadająca za mapowanie O/R Hibernate-annotations – pozwala na mapowanie poprzez tagowanie Hibernate-validator – dodaje możliwość dodawania tagów constraintowych do pól persystowanej klasy Hibernate-entitymanager - Połączenie podprojektówHibernate EntityManager oraz Hibernate Annotations pozwala posługiwać się techniką mapowania obiektowo-relacyjnego zgodnie ze standardem JPA Hibernate-jpa
23 Moduł nadrzędny – pom.xmlZaznaczamy obecność ‚pomów’ podrzędnych
24 Wystarczy teraz przy użyciu Mavena pobrać wszystkie zadeklarowane dependency, aby mieć dostęp do potrzebnego API
25 Klasy modelowe Message Thread
26 Message W naszym rozwiązaniu będziemy korzystać z możliwości mapowania klas tagami, zamiast tworzenia plików hbm.xml (o nich później) Każda klasa POJO jest tzw. entity i jest deklarowana przy (na poziomie klasy) @Table pozwala zmapować naszą klasę na tabelę w bazie danych. Możemy ustawić 4 atrybuty: nazwę tabeli, jej katalog, schemat oraz możemy ustawić UNIQUE constarints dla poszczególnych kolumn
27 Message @Table pozwala zmapować naszą klasę na tabelę w bazie danych. Możemy ustawić 4 atrybuty: Name - nazwę tabeli Catalogue - jej katalog, Schema - schemat UniqueConstraint - umożliwia ustawienie UNIQUE constarints dla poszczególnych kolumn W naszym przypadku, ustawiamy tylko nazwę tabeli
28 Message @Id deklaruje identyfikator entity, primary keyIstnieje możliwość wskazania pól, które mają zostać wygenerowane automatycznie. Może się to przydać na przykład w przypadku primary key. W tym celu JPA definiuje 5 typów strategii generowania: AUTO TABLE IDENTITY SEQUENCE Identity copy Hibernate proponuje więcej niż JPA (patrz dok.)
29 Message @Column – określa kolumnę, która będzie zmapowana z pola nad którym znajduje się adnotacja. Możliwe jest ustawienie atrybutów: Name – nazwa Unique – UNIQUE contsraint, domyślnie false Nullable – czy kolumna może zawierać null Insertable – czy kolumna może być częścią INSERTa Updatable – czy kolumna może być częścią UPDATEa columnDefinition – nadpisuje sql DDL fragment Table – docelowa tabela Length – długość kolumny (domyślnie 255) Precision – precyzja dziesiętna Scale
30 Mapowanie relacji – pojawia się potrzeba mapowania relacjiMapowanie relacji – pojawia się potrzeba mapowania relacji. Z pomocą przychodzą adnotacje: One-to-one – jeden do jednego. Mamy trzy sytuacje: Dwa entity dzielą primary key (feorign key jest przechowywany przez jeden z nich).
31 One-to-one – jeden do jednego. Mamy trzy sytuacje:Dwa entity dzielą primary key (feorign key jest przechowywany przez jeden z nich). Połączenie dwóch entity jawną kolumną foreign key Asocjacje mogą być dwustronne. Wtedy jedna ze stron musi być właścicielem. Właściciel jest odpowiedzialny za update kolumny. Aby oznaczyć kolumnę jako nie właściciel używamy mappedBy. Nie jest to w tym przykładzie potrzebne, bo już ustawiliśmy po stronie właściciela @JoinColumn
32 One-to-one – jeden do jednego. Mamy trzy sytuacje:Dwa entity dzielą primary key (foreign key jest przechowywany przez jeden z nich). Połączenie dwóch entity jawną kolumną foreign key Z użyciem tabeli łącznikowej Tworzymy tutaj tabelę łącznikową CustomerPassports, która używa primary key customer’a i passport
33 Many-to-one - wiele do jednego.Domyślna nazwa kolumny – thread_id Istnieje możliwość określenia ręcznie nazwa Możemy też zrealizować taką relację przy użyciu tabeli łącznikowej