Hibernate

advertisement
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

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
PostgreSQL - ograniczenia
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
pgAdmin III – główne okno
pgAdmin III – zapytania SQL
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
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>
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
• 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/enUS/html/ch02.html#hibernate-gsg-tutorial-basic-config
• 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/packag
e-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 schematu
o validate – sprawdza, czy schemat bazy zgadza się z mapowaniem
• 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”/>
Klasa HibernateUtil
• 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
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
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
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
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)
Download