03 Podstawowe cechy i API trwałości Hibernateid 4437 ppt

background image

Podstawowe cechy i API

Hibernate

Rafał Kasprzyk

background image

Rafał Kasprzyk

Hibernate – wprowadzenie

Hibernate jest frameworkiem

służącym do zapewniania trwałości

danych

wsparcie mapowania modelu

obiektowego na model relacyjny

Zadaniem zestawu narzędzi

wchodzących w skład biblioteki jest

połączenie środowiska obiektowego Javy

z systemami relacyjnych baz danych

NIE WYMAGA SERWERA

APLIKACJI !!!

Obecnie jest zarządzany i rozwijany

przez firmę JBoss Inc.

background image

Rafał Kasprzyk

Hibernate - wprowadzenie

Hibernate jest frameworkiem

wyróżniającym się spośród wszystkich

narzędzi ORM

Dostępny jako open source

Popularny, stabilny, wysoko wydajny

Posiada wyjątkowo rozbudowane możliwości

definiowania mapowań oraz bardzo wygodny

model użycia

Obsługuje większość liczących się na rynku

systemów bazodanowych

Oracle, DB2, MySQL, PostgreSQL, …

Pomimo, że nie jest standardem, to prócz EJB

właśnie Hibernate jest najpopularniejszym

frameworkiem do zapewniania trwałości

Bibliotekę doceniła firma SUN, która tworząc

specyfikację EJB 3.0 wzorowała się na

rozwiązaniach zastosowanych w Hibernate

background image

Rafał Kasprzyk

Biblioteki Hibernate

Pakiet Hibernate można pobrać ze

strony

http://hibernate.org

W skład pakietu wchodzi:

Biblioteka Hibernate: hibernate3.jar

Biblioteki pomocnicze innych dostawców

antlr.jar,

dom4j.jar,

cglib.jar,

commons-collections.jar,

commons-logging.jar,

ehcache-1.1.jar,

Log4j.jar,

asm.jar,

jta.jar,

background image

Rafał Kasprzyk

Warstwa integracji na

Hibernate

background image

Rafał Kasprzyk

Hibernate - cechy

Odpowiedzialny jest za mapowanie klas na

tabele bazodanowe

Pozwala na generowanie schematów bazy

danych

Udostępnia mechanizmy generowania

zapytań, dzięki czemu nie potrzeba

operowania danymi na poziomie SQL i

JDBC

Przyspiesza tworzenie aplikacji poprzez

odciążenie programisty od ręcznej manipulacji

danymi

Posiada bardzo rozbudowane i elastyczne

metody wykonywania poleceń pobierania,

przetwarzania i zapisu danych

HQL (ang. Hibernate Query Language)

Zapytania przez obiekty Criteria i Example

Filtry, Natywny SQL

background image

Rafał Kasprzyk

Hibernate – cechy

Hibernate pozwala wykorzystać

POJO do pełnienia funkcji obiektów

transferowych

Do przekazywania danych pomiędzy

warstwami aplikacji i przesyłania

danych siecią można wykorzystywać

POJO

Klasy trwałe nie musza implementować

żadnych specjalnych interfejsów

W porównania do innych narzędzi

posiadających podobną funkcjonalność

Hibernate w znacznie mniejszym zakresie

wymaga pisania dodatkowego kodu

Praktycznie każda klasa może

reprezentować encję

background image

Rafał Kasprzyk

Hibernate – cechy

Różne techniki poprawiające

wydajność aplikacji komunikującej się

z bazą danych

Buforowania obiektów w pamięci

podręcznej

Obiekty niezmodyfikowane nie są

utrwalane

Do bazy przesyłane są jedynie

zmodyfikowane kolumny

Tzw. opóźnione wykonanie kodu SQL

Mechanizm pozwala na zapis stanu

aktualnego obiektu przy jednokrotnym

odwołaniu się do bazy mimo, ze obiekt był

kilkakrotnie modyfikowany w trakcie

transakcji

background image

Rafał Kasprzyk

Hibernate

- cechy

Hibernate działa na wyższym poziomie

abstrakcji w stosunku do JDO lub EJB

dostarcza mechanizmów tzw.

przezroczystej trwałości (ang.

transparence persistence)

Wsparcie dla wielu standardów

JMX (ang. Java Management Extension)

JTA (ang. Java Transaction API)

Świetna współpraca ze Spring

Framework

Spring to obecnie prawdopodobnie

najpopularniejsze środowiskiem rozwoju

aplikacji J2EE

background image

Rafał Kasprzyk

Szczegółowa architektura

Hibernate

background image

Rafał Kasprzyk

Implementacja encji

Encja jest obiektem mającym dla

nas znaczenie, rzeczywistym bądź

wyobrażonym, o którym informacje

muszą być znane lub

przechowywane

użytkownik, faktura, spotkanie,…

Encje implementowane są za

pomocą klas trwałych

Hibernate pozwala na wykorzystanie

POJO w roli klas trwałych, ale

konieczne jest spełnienie pewnych

ograniczeń

background image

Rafał Kasprzyk

Ograniczenia na POJO

Wszystkie pola trwałe muszą być prywatne

Należy stworzyć accessory i mutatory dla

pól trwałych

Musi istnieć bezargumentowy konstruktor

może być domyślny

Jedno z pól powinno pełnić rolę

identyfikatora encji (opcjonalnie)

Hibernate może sam zarządzać

identyfikatorami obiektów, jednak nie jest to

zalecane

Zalecany jest sztuczny identyfikator, typu nie-

prostego

Możliwość przypisania null

Zaleca się stosowanie wspólnego nazewnictwa

np. id

Modyfikator final ogranicza możliwości

strojenia wydajności

background image

Rafał Kasprzyk

Tożsamość obiektu a Hibernate

Hibernate daje możliwość określenia

tożsamość obiektu trwałego w dwojaki

sposób:

Wykorzystanie specjalnie do tego celu

przeznaczonego atrybutu obiektu trwałego

Wartość zwracana w wyniku wywołania

metody session.getIdentifier(Object

o);

Obie metody dają tą samą wartość dla

jednego obiektu

Zaleca się korzystanie z pierwszej

metody, co wymaga:

Dodanie prywatnego atrybutu stanowiącego

identyfikator obiektu wraz ze stosownymi

metodami zapisu i odczytu

Określenie typu identyfikatora obiektu

trwałego w pliku definicji mapowania

background image

Rafał Kasprzyk

Definicja identyfikatora encji

public class User {
private Long id;

// pozostałe atrybuty

public Long getId() {
return this.id;
}
private void setId(Long id) {
this.id = id;
}

// pozostałe metody setXXX i getXXX

}

<class name="User" table="User">
<id name="id" column="ID" type="long">
<generator class="native" />
</id>
...
</class>

User.hbm.x
ml

User.java

background image

Rafał Kasprzyk

Przykład obiektu trwałego

(encji)

Załóżmy, że chcemy stworzyć katalog

użytkowników

użytkownik to nasza encja

Informacje opisujące użytkownika, które będą nas

interesowały, to jedynie jego identyfikator, imię i

nazwisko

package pl.isolution.hibernate;

public class User {

private Long id;

private String name;

private String surname;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

// pozostałe metody setXXX i getXXX

}

background image

Rafał Kasprzyk

API Hibernate

Podstawowe API Hibernate daje

programiście 5 interfejsów, które

stanowią fasadę do mechanizmów

manipulacji trwałymi obiektami

SessionFactory

Session

Transaction

Query

Criteria

background image

Rafał Kasprzyk

API Hibernate

background image

Rafał Kasprzyk

SessionFactory

Realizuje wzorzec AbstractFactory

Odpowiedzialny za stworzenie instancji

klasy implementującej interfejs Session

Obiekt klasy SessionFactory musi być

bezpieczny dla wątków i opatrzony

modyfikatorem final

Zawiera wszelkie informacje na temat

mapowania konkretnych klas na tabele w

bazie danych

Tworzony raz na początku pracy aplikacji

Utworzenie jest kosztowne

Współdzielony przez wiele wątków

Współpracuje z mechanizmem

buforowania obiektów trwałych drugiego

poziomu

background image

Rafał Kasprzyk

SessionFactory (klasa

pomocnicza)

Klasa pomocnicza powinna

implementować wzorzec projektowy

Singloton

public class HibUtil {

private static final SessionFactory sessionFactory;

static {
try {

sessionFactory = new Configuration()

.configure().buildSessionFactory();

}catch (Throwable e) {
System.err.println
("Initial SessionFactory creation failed." + e);
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}

}

//wykorzystanie klasy pomocniczej

SessionFactory sf = HibernateUtil.getSessionFactory();

background image

Rafał Kasprzyk

SessionFactory

(JNDI)

hibernate.cfg.xml

<hibernate-configuration>

<session-factory name =
"java:hibernate/SessionFactory">

...
</session-factory>

</hibernate-configuration>

Tworzenie fabryki sesji (kod

inicjalizujący)

new Configuration().configure().buildSessionFactory();

Wykorzystanie fabryki sesji

InitialContext ic = new InitialContext();
SessionFactory sf = (SessionFactory)

ic.lookup("java:hibernate/SessionFactory");

background image

Rafał Kasprzyk

Session

Jednowątkowy obiekt o stosunkowo krótkim

cyklu życia i zwykle reprezentujący pojedynczą

konwersację z bazą danych

”unit of work

Tworzenie nie jest kosztowne

Instancja klasy Session jest pełni rolę zarządcy

trwałości obiektów (ang. persistence manager)

Stanowi interfejs do składowania i pobierania

obiektów z bazy danych

Odpowiedzialny za stworzenie instancji klas

implementujących interfejsy

Transaction

Query

Criteria

Współpracuje z mechanizmem buforowania

obiektów trwałych pierwszego poziomu

background image

Rafał Kasprzyk

Session

W przypadku aplikacji internetowych

czas życia obiektu klasy Session

jest nie dłuższy niż czas realizacji

żądania HTTP

session-per-request

Uwaga! Obiekt klasy Session biblioteki

Hibernate nie ma nic wspólnego z sesją

aplikacji webowej (HttpSession)

background image

Rafał Kasprzyk

Transakcje Hibernate

Transakcja to zdarzenie lub sekwencja zdarzeń

w wyniku, których wykonanie prowadzi do

przejścia bazy danych z jednego poprawnego

stanu do drugiego

W przypadku niepowodzenia dowolnego ze zdarzeń

stan bazy danych nie zmienia się

Każdą transakcję charakteryzuje:

Niepodzielność (ang. atomicity)

Wykonają się wszystkie operacje, albo żadna

Spójność (ang. consistency)

Wszystkie operacje składające się na transakcje prowadzą

do przejścia z jednego spójnego stanu do drugiego

Izolacja (ang. isolation)

Z punktu widzenia transakcji tylko ona w danym

momencie ma dostęp do bazy danych

Trwałość (ang. durability)

Zatwierdzenie transakcji prowadzi do zapamiętania

wprowadzonych zmian nawet w przypadku awarii systemu

background image

Rafał Kasprzyk

Transaction

Jednowątkowy obiekt transakcji

tworzony przez sesję, którego celem

jest wyznaczenie granic operacji

atomowych

W ramach sesji może zostać

stworzonych kilka kolejnych transakcji

Celem istnienia tego interfejsu jest

abstrahowanie od użytego w aplikacji

mechanizmu sterownia transakcjami

systemowymi takimi jak: JDBC, JTA

Hibernate nie pozwala na

automatyczne zatwierdzanie transakcji

tryb auto-commit nie jest możliwy

background image

Rafał Kasprzyk

Szablon transakcji

Session session = factory.openSession();
Transaction transaction = null;
try {

transaction = session.beginTransaction();

//dowolne operacje na obiektach trwałych i sesji

Hibernate


transaction.commit();

}
catch (Exception e) {

if (transaction!=null)
transaction.rollback();
session.close();
throw e;

}
finally {

session.close();

}

background image

Rafał Kasprzyk

Query

Obiekty implementujące interfejs

Query reprezentują zapisane i

nazwane zapytania

Pozwalają na manipulacji zapytaniami

definiowanymi w pliku mapowania

obiektowo-relacyjnego

Tworzone są przez obiekt sesji i są

ściśle związane z jej cyklem życia

Za pomocą obiektów zapytań

przekazuje się parametry do

zapytania i odbiera wyniki zapytania

w postaci iteratora bądź listy ze

standardowego API kolekcji Java

background image

Rafał Kasprzyk

Criteria

Obiekty implementujące interfejs

Criteria w przeciwieństwie do

obiektów Query służą przede wszystkim

do dynamicznego budowania zapytań

Doskonale nadaje się do aplikacji, które

dostarczają użytkownikom mechanizmów

zadawania zapytań za pomocą graficznych

kreatorów raportów

Stanowią fasadę do Query API pozwalające

na budowanie dynamicznie złożonych

zapytań do bazy na żądanie użytkownika

Tworzone, podobnie jak obiekty Query,

w ramach sesji i są ściśle związane z jej

cyklem życia

background image

Rafał Kasprzyk

Hibernate – zasada działania

Obiekty, które mają zostać utrwalone

definiowane są w plikach mających

format XML. Pliki te to tzw. pliki

mapowań, które pełnią kilka zadań:

Opisują wszystkie atrybuty obiektów, które

mają zostać utrwalone w bazie relacyjnej, jak

również wszelkiego rodzaju związki pomiędzy

opisywanymi obiektami

Stanowią swego rodzaju składnicę z

informacjami na temat klas, których instancje

będą przechowywane w bazie danych

Pełnią rolę inicjatorów klasy SessionFactory

tworząc kontekst pracy mechanizmu

utrwalania obiektów

Pozwalają na wygenerowanie pliku DDL do

utworzenia schematu bazy danych i

szkieletów klas, których obiekty będą

utrwalane

background image

Rafał Kasprzyk

Hibernate – zasada działania

SessionFactory dostarcza

mechanizmu do zarządzania

instancjami trwałych klas poprzez

interfejs Session.

Interfejs Session jest swego rodzaju

pośrednikiem między wątkiem

aplikacji, a bazą danych.

Zadaniem interfejsu Session jest

ukrywanie szczegółów związanych z

komunikacją, jak również otwieranie i

zamykanie połączenia.

background image

Rafał Kasprzyk

Stany obiektów

Korzystając z Hibernate należy myśleć o

stanie obiektów przetwarzanych przez

aplikację, a nie o wykonywanych poleceniach

SQL

Generowaniem i wysyłaniem poleceń do bazy

danych zajmuje się Hibernate

Inne podejście jest uzasadnione jedynie podczas

strojenia aplikacji

Możliwe stany obiektu:

”ulotny” (ang. transient)

Utworzony ale nie związany z sesją

”trwały” (ang. persistent)

Związany z sesją

Posiada identyfikator i reprezentację w bazie danych

Zmiany na obiektach trwałych są wykrywane przez

Hibernate i synchronizowane ze stanem w bazie danych

”odłączony” (ang. detached)

Obiekt trwały, którego sesja została zakończona

Można go modyfikować, a następnie związać z nową

sesją

Przydatne przy realizacji ”długich transakcji”

background image

Rafał Kasprzyk

Manipulacja obiektami trwałymi

Podstawowe API Hibernate pozwala

na bardzo prostą manipulację

obiektami prostymi (CRUD)

Zapis (ang. Create)

Odczyt (ang. Retrieve)

Aktualizacja (ang. Update)

Usunięcie (ang. Delete)

Hibernate umożliwia również bardzo

zaawansowane wyszukiwanie

obiektów z uwzględnieniem

związków pomiędzy nimi

background image

Rafał Kasprzyk

Utrwalanie obiektu

Aby utrwalić instancję klasy trwałej

należy najpierw utworzyć jej obiekt

W procesie tworzenia obiektu

zwykle nie bierze udział Hibernate

Nie jest to konieczne ponieważ

obiektami utrwalanymi zwykle są POJO

Utrwalanie obiektu dokonuje się za

pomocą metody save(Object obj)

sesji Hibernate w ramach aktywnej

transakcji

background image

Rafał Kasprzyk

Utrwalanie obiektu

Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

User user = new User();
user.setName("Jan");
user.setSurname("Kowalski");

session.save(user);

transaction.commit();
session.close();

background image

Rafał Kasprzyk

Ładowanie obiektu trwałego

Aby załadować obiekt trwały należy

zastosować metodę

get(Class

clazz,Obiect id)

lub

load (Class

clazz,Obiect id)

sesji Hibernate w

ramach aktywnej transakcji

Pierwszy parametr to klasa obiektu

trwałego

Drugi parametr to identyfikator

Metoda get(…) zwraca wyjątek, gdy

błędny klucz

Metod load(…) zwraca null, gdy

błędny klucz

background image

Rafał Kasprzyk

Ładowanie obiektu trwałego

Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

long id = 54321;

User user =

session.get(User.class,new Long(id));

transaction.commit();
session.close();

background image

Rafał Kasprzyk

Aktualizacja stanu obiektu

trwałego

Nie wymaga jakiejkolwiek jawnej

operacji na sesji Hibernate

W ramach otwartej transakcji Hibernate

należy dokonać zmiany stanu obiektu

user.setName("Piotr");

W momencie zatwierdzania transakcji,

zmiany automatycznie zostaną

odwzorowane w bazie danych

Jeśli zmiany mają zostać

natychmiast odwzorowane w bazie

danych należy wywołać metodę

flush() na otwartej sesji

session.flush();

background image

Rafał Kasprzyk

Aktualizacja stanu obiektu

trwałego

Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

long id = 777;
User user = session.get(User.class, new Long(id));

user.setName(

"Piotr");

tx.commit();
session.close();

background image

Rafał Kasprzyk

Usunięcie obiektu trwałego

Usunięcie obiektu trwałego polega

usunięcia jego reprezentacji w bazie

danych

Najczęściej sprowadza się do usunięcie

określonego rekordu z bazie danych

Instancja obiektu nie jest usuwana

Obiekt przechodzi ze stanu ”trwały” do stanu

”ulotny”

Referencja wciąż wskazuje na obiekt istniejący

w pamięci maszyny wirtualnej Java

Usunięcie obiektu dokonuje się za pomocą

metody delete(Object obj) sesji

Hibernate w ramach aktywnej transakcji

session.delete(user);

background image

Rafał Kasprzyk

Usunięcie obiektu trwałego

Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

long id = 13;
User user = session.get(User.class, new Long(id));

session.delete(user);

transaction.commit();
session.close();

background image

Rafał Kasprzyk

Operacje na obiektach

odłączonych

update()

Synchronizacja z bazą danych stanu

obiektu odłączonego

saveOrUpdate()

save() gdy nowy

update() w przeciwnym przypadku

merge()

Skopiowanie stanu obiektu do trwałej

instancji o tym samym identyfikatorze

Utworzonej

Istniejącej w danej sesji

Załadowanej z bazy danych

background image

Rafał Kasprzyk

Zapytania do bazy danych

Zapytania w HQL (ang. Hibernate Query

Language)

Język syntaktycznie i semantycznie podobny do SQL

SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY,

złączenia, podzapytania (o ile wspiera je DBMS)

Zorientowany obiektowo

Dziedziczenie, asocjacje, …

Zapytania poprzez obiekty Criteria

Zapytania budowane poprzez obiektowe API

Zapytania poprzez obiekty Example

QBE (ang. Query By Example)

Zapytanie budowane w oparciu o przykładową instancję

Filtry

Wykorzystywane do kolekcji i/lub tablic

Zapytania w zwykłym SQL

Możliwość wykorzystania specyficznych konstrukcji np.

CONNECT

background image

Rafał Kasprzyk

Podsumowanie

Podstawowe cechy Hibernate

Architektura Hibernate

Podstawowe API

Zasada działania

Operacje CRUD

Mechanizmy zapytań


Document Outline


Wyszukiwarka

Podobne podstrony:
03 podstawy RBDid 4615 ppt
04 03 Podstawy komunikacji społecznejid 4911 ppt
03 PODSTAWY GENETYKI
Materiały do egzaminu - Podstawowe cechy systemu rehabilitacji, ►PSYCHOLOGIA OSÓB NIEPEŁNOSPRAWNYCH
epoki, odrodzenie, Podstawowe cechy kultury renesansu
Java 03 Podstawowe typy danych
03 Podstawy geometrii wykre¶lnej
03 Nowotwory pierwotne i przerzuty do watrobyid 4183 ppt
2013 03 26 W 7 TRM Przygotowanie obiektu i budowyid 28270 ppt
03 Podstawy geometrii wykre lnej
03 Podstawowy funkcjonowania sieci informatycznejid 4248
06 Przykład wykorzystania Hibernateid 6375 ppt
dydaktyka, Podstawowe cechy nauczania realizowane zgodnie z założeniami dydaktyki tradycyjnej i preo

więcej podobnych podstron