17
Hibernate PostgreSQL MARCIN NOWAK, WOJCIECH BASZCZYK

Hibernate PostgreSQL

Embed Size (px)

DESCRIPTION

Hibernate PostgreSQL. Marcin nowak , Wojciech baszczyk. PostgreSQL. Jest to jeden z najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych Działa na wielu systemach operacyjnych - PowerPoint PPT Presentation

Citation preview

Page 1: Hibernate PostgreSQL

HibernatePostgreSQLMARCIN NOWAK, WOJCIECH BASZCZYK

Page 2: Hibernate PostgreSQL

PostgreSQL

Jest to jeden z najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych

Działa na wielu systemach operacyjnych

Posiada mechanizm Multiversion Concurrency Control jednocześnie zachowując zasady ACID.

Zawiera razszeżenia obiektowe - definiowanie nowych typów, czy dziedziczenie typów tablic

Zgodność ze standardem SQL

pgAdmin

Page 3: Hibernate PostgreSQL

PostgreSQL - ograniczenia

Page 4: Hibernate PostgreSQL

Instalacja silnika PostgreSQL

W celu instalacji należy pobrać odpowiednią wersję ze strony:http://www.postgresql.org/download/

Instalacja jest bardzo prosta i intuicyjna – wystarczy zaakceptować licencję, odpowiednią liczbę razy kliknąć „next”, a końcu „finish”

Pobrana paczka zawiera serwer bazy PostgreSQL oraz narzędzie do zarządzania bazą – pgAdmin III

Tworzenie nowej bazy danych również bardzo intuicyjne

Page 5: Hibernate PostgreSQL

pgAdmin III – główne okno

Page 6: Hibernate PostgreSQL

pgAdmin III – zapytania SQL

Page 7: Hibernate PostgreSQL

Co to jest Hibernate? Framework będący warstwą pośredniczącą pomiędzy bazą

danych a aplikacją

Główną funkcjonalnością jest mapowanie obiektowo-relacyjne

Składa się kilku podprojektów, jak HibernateAnnotations, HibernateShards, HibernateTools itd.

NHibernate – implementacja mapowania obiektowo-relacyjnego dla platformy .NET

Page 8: Hibernate PostgreSQL

Dodawanie zależności Hibernate do projektu

Można ręcznie pobierać odpowiednie jary, ale wygodniej wykorzystać Mavena

Wymagane zależności:<groupId>org.hibernate</groupId><artifactId>hibernate-core</groudId><version>4.3.4.Final</version>

Trzeba również dodać sterownik do silnika SQL:<groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>9.3-1101-jdbc41</version>

Page 9: Hibernate PostgreSQL

hibernate.cfg.xml

Podstawowy plik konfigurujący połączenie z bazą danych oraz mapowanie obiektowo-relacyjne

Można w nim ustawić bardzo dużo parametrów, jednak w przypadku tego tutoriala ograniczymy się do podstawowych

Najprościej ściągnąć szablon z Internetu i pozmieniać w nim odpowiednie pola

Page 10: Hibernate PostgreSQL

• connection.driver_class – klasa sterownika silnika SQL• connection.url – adres:port/nazwa_bazy• connection.username, connection.password – oczywiste

• connection.pool_size – liczba połączeń w puli JDBC

• Uwaga:„ The built-in Hibernate connection pool is in no way intended for production use. It lacks several features found on production-ready connection pools. See the section discussion in Hibernate Developer Guide for further information.”

~http://docs.jboss.org/hibernate/orm/4.2/quickstart/en-US/html/ch02.html#hibernate-gsg-tutorial-basic-config

Page 11: Hibernate PostgreSQL

• dialect – klasa wspomagająca tworzenie zapytań SQL dla konkretnego dialektu

• Pełna lista dialektów: http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/dialect/package-summary.html

• show_sql – włączenie/wyłączenie logowania przez hibernate treści zapytań SQL

• hbm2ddl.auto – parametr odpowiedzialny za generowanie schematu bazy danych na podstawie zdefiniowanego mapowania. Możliwe wartości:

o create – za każdym razem tworzy od nowa schemat bazy o create-drop – tak samo jak wyżej, dodatkowo po zakończeniu działania

dropuje bazęo update – stara się aktualizować ewentualne zmiany schematuo validate – sprawdza, czy schemat bazy zgadza się z mapowaniem

Page 12: Hibernate PostgreSQL

• W tej sekcji listujemy wszystkie klasy, które mają zostać mapowane i zapisywane w bazie danych

• Jeżeli korzystamy z mapowania przy pomocy XML’a (o tym za chwilę), zamiast <mapping class=„klasa”/> należy użyć:<mapping resource=„ścieżka_do_pliku_mapującego.hbm.xml”/>

Page 13: Hibernate PostgreSQL

• Utworzenie sessionFactory jest kosztowne, więc wykonujemy je tylko raz jako zmienną statyczną ogólnodostępnej klasy

• W metodzie configure(string) podajemy ścieżkę dostępu do pliku hibernate.cfg.xml – względem katalogu resources, gdzie domyślnie szuka Hibernate

• Jedyny sposób utworzenia sessionFactory, który nie jest „deprecated” w Hibernate 4.3.x

Klasa HibernateUtil

Page 14: Hibernate PostgreSQL

Mapowanie obiektowo-relacyjne

Na początku tworzymy klasy, których instancje chcemy przechowywać w bazie

Standard POJO – Plain Old Java Object – prywatne pola, gettery i setery o nazewnictwie getNazwaPola() (ew. isNazwaPola() dla boolean) – bez żadnych udziwnień

Następnie mapujemy obiekt na relację używając jedną z dwóch metod: starszej - przy pomocy plików XML

nowszej - przy pomocy adnotacji

Page 15: Hibernate PostgreSQL

Mapowanie przez pliki XML

Do każdej mapowanej klasy tworzymy odpowiadający plik nazwa_klasy.hbm.xml

Wypisujemy wszystkie pola, które mają być odwzorowywane w bazie

Niewygodne – zmiana w kodzie wymusza tę samą zmianę w pliku xml

Page 16: Hibernate PostgreSQL

Mapowanie przez adnotacje

Nie trzeba tworzyć żadnych dodatkowych plików, całe mapowanie zawarte w adnotacjach

Można adnotować pola albo gettery

Mapowaną klasę oznaczamy przy pomocy @Entity, następnie oznaczamy jej pola nie będące typami prostymi oraz mające szczególne właściwości (np. klucz główny) odpowiednimi adnotacjami

Page 17: Hibernate PostgreSQL

Podstawowe adnotacje @Entity - klasa jest encją

@Table(name=…) – nazwa tabeli w bazie, można ustawić dodatkowe opcje

@Id – klucz główny@GeneratedValue(strategy=…) – strategia przydzielania id@Column(name=…) – nazwa kolumny, można ustawić dodatkowe opcje

@ManyToOne – relacja wiele do jednego@OneToMany, @OneToOne, @ManyToMany – analogicznie@Embedded – pola zależnej klasy będą w tej samej tabeli (nie będzie tworzona osobna tabela)

@Transient – pole nie będzie zapisywane@Lob – duży obiekt (large object)