Transcript Hibernate

Data powstania: Autor i lider:

2001 rok Gavin King

Najnowsza wersja:

3.3.1

Licencja:

Open Source

Hibernate

jest obiektowym narzędziem dostępu do bazy danych. Hibernate pozwala tworzyć klasy odpowiadające tabelkom w bazie danych. Umożliwia modelowanie relacji, dziedziczenia, polimorfizmu, kompozycji i kolekcji. W Hibernate mamy możliwość wykonywania SQL owych zapytań do bazy danych. Udostępnia też własny język zapytań (HQL), który dorównuje możliwościami SQL-owi, a przewyższa go pod względem przejrzystości.

Hibernate to technologia O/RM dla Javy – Z uwzględnieniem asocjacji, kompozycji, dziedziczenia, polimorfizmu, kolekcji • Funkcjonalność Hibernate: – Odwzorowanie klas Javy na tabele w bazie danych • I typów danych Javy na typy danych SQL – Dostarczanie mechanizmów wykonywania zapytań do bazy danych • Pozwala uniknąć ręcznego zarządzania danymi na poziomie SQL i JDBC • Wg dokumentacji celem Hibernate jest zwolnienie projektanta aplikacji z konieczności ręcznego kodowania 95% zadań związanych z zapewnieniem trwałości danych

• Hibernate jest najbardziej odpowiedni dla aplikacji Java pracujących w warstwie pośredniej, • Rozpowszechniany na licencji FSF Lesser Gnu Public License • Najpopularniejsza obecnie implementacja odwzorowania obiektowo - relacyjnego dla Javy – Dużo materiałów i pomocy w Internecie – Udział twórców Hibernate w pracach nad specyfikacją EJB 3.0

Część konfiguracyjna

, a więc całość plików do konfiguracji zawarta jest w jednym pliku, najczęściej o nazwie hibernate.cfg.xml, 

Wiele klas mapowanych

, tabele w bazie danych, np. Person.java, Contakt.java. Najczęściej takie klasy posiadają dużą ilość atrybutów, a dla każdego z nich przyporządkowane są metody: set ( ) oraz Get ( )), 

XML – owe mappingi

powyższych klas - to właśnie w nich można znaleźć opisy, w jaki sposób te klasy mogą ulec procesowi mapowania na poszczególne tabele w bazie danych.

Jedna lub więcej klas

, które odwołują się do bazy danych, oraz tych, które wykorzystują z interfejsów takich jak: Transaction, Query, SessionFactory, Configuration, Session.

Interfejs Session

Hibernate. Projekty Session można uznać za lekkie, ponieważ ich koszt utworzenia, a także zniszczenia nie jest wielki. A więc jest to szczególnie ważny aspekt, ponieważ każda aplikacja nieustannie usuwa, a następnie tworzy coraz to nowsze sesje. Znaczenie sesji Hibernate można nazwać jako zjawisko między połączeniem i transakcją.

– jest głównym interfejsem każdej aplikacji 

Interfejs SessionFactory

– aplikacja zajmuje się pobieraniem egzemplarzy „Session” z „SessionFactory”. Interfejs SessionFactory nie można określić jako „lekki”, ponieważ został utworzony z myślą o współpracy przez większą ilość aplikacji. Często zdarza się tak, że na całą aplikację pojawia się tylko jeden obiekt „SessionFactory”, który powstaje w czasie procesu inicjalizacji. W przypadku, kiedy aplikacja wykorzystuje kilka baz danych wraz z Hibernate, to wtedy jest potrzebny osobny obiekt „SessionFactory” dla poszczególnej bazy danych.

Interfejs Transaction

– stara się ukryć szczegóły implementacji konkretnych mechanizmów transakcyjnych: JDBC, klasy „UserTransaction” z JTA lub nawet transakcji COBRA. Ma to na celu ułatwienie przenośności aplikacji Hibernate pomiędzy różnorodnymi środowiskami wykonywania i kontenerami. Aplikacje Hibernate nie są zmuszone korzystać z interfejsu „Transaction”, jeżeli chcą zarządzać transakcjami we własnym zakresie.

Interfejs Query

– ma na celu umożliwić proces wysyłania zapytań do bazy danych oraz sterowanie procesem ich realizowania. Takie zapytania należy pisać w języku WQL albo językiem odpowiednim dla poszczególnej bazy danych dialekcie SQL. Egzemplarz „Query” jest odpowiedzialny za zmniejszenie liczby zwracanych wyników i o wykonanie zapytania.

Interfejs Configuration

– służy on do konfiguracji i uruchomienia Hibernate. A więc aplikacja korzysta z egzemplarza „Configuration” do ustalenia położenia dokumentów odwzorowań i właściwości charakterystycznych dla Hibernate.

• Dowolna klasa może reprezentować encje • Wygodne i intuicyjne mapowanie z wykorzystaniem plików XML lub adnotacji (od Hibernate 3.0) • Automatyczna optymalizacja = wydajność • Mniej kodu = mniej błędów • Proste zasady działania • Możliwość korzystania z możliwości SQL bez wychodzenia poza granicę języka Java • Możliwość stworzenia dużej bazy bez większego wkładu pracy • Dostepność narzędzi open source • Popularność

 Wsparcie techniczne oraz dokumentacja Hibernate, które można znaleźć w Internecie można określić jako niewystarczająca,  Posiada wiele usterek,  Dla złożonych danych, proces mapowania danych z obiektu do tabeli i odwrotnie, zmniejsza wydajność, powodując tym samym wydłużenie czasu konwersji,  Hibernate nie pozwala korzystać z poszczególnych zapytań, których można używać w JBDC, na przykład nie można wstawić dużej liczby obiektów do jednej i tej samej tabeli za pomocą jednego zapytania.

Plik Message.java – prosta klasa trwałości

Package hello; Public class Message { Private Long id; Private String text; Atrybut identyfikatora Treść komunikatu Private Message nextMessage; Referencja do innego komunikatu Private Message () {} Public Message String text) { This.text = text; } } Public Long getId () { Return id;

Private void setId(Long id) { This.id = id; Public String getText () { Return text; } Privatte void setText(String text) { This.text = text; } Public Long getNextMessage() { Return nextMessage; } Private void setnNextMessage(Long nextMessage) { This.nextMessage = nextMessage; }

Wyświetlenie na konsoli napisu „Witaj świecie”

Message message = new Message("Witaj świecie"); System.out.println(message.getText());

Zapisywanie obiektu „Message” do bazy danych

Session session = getSessionFactory( ).openSession(); Transaction tx = session.beginTransaction( ); Message message = new Message("Witaj świecie"); Session.save(message); Tx.commit ( ); Session.close ( );

Przekazanie do bazy danych polecenia SQL

Insert into MESSAGE (MESSAGE_ID, MESSAGE_TEXT_NEXT_MESSAGE_ID) values (1, "Witaj świecie", null) Transaction tx = session.beginTransaction( ); Message message = new Message(„Witaj świecie”); Session.save(message); Tx.commit ( ); Session.close ( );

Pobieranie z bazy danych wszystkich komunikatów w kolejności alfabetycznej oraz wyświetlanie ich zawartości

Session newSession = getSessionFactory ( ).openSession ( ); Transaction newTransaction = newSession.beginTransaction( ); List messages = newSession.finf("from Message as m order by m.text asc"); System.out.println("Znalezionych komunikatów: " + messages.size ( )); For (Iterator iter = messages.iterator( ); iter.hasNext( ); ) { Message message = (Message) iter.next( ); System.out.println(message.getText( )); } NewTransaction.commit( ); newSession.close( );

Przekształcenie zapytania na kod SQL w chwili wywoływania metody find( ).

Select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID

From MESSAGES m Order by m.MESSAGE_TEXT asc

Taki kod powoduje wyświetlenie na konsoli napisu: Znalezionych komunikat ó w: 1 Witaj świecie

Prosty plik odwzorowania Hibernate w postaci XML

Główną zaletą Hibernata, jest jego prostota i łatwość użycia. Dzięki niemu nie trzeba pisać setek poleceń w SQLu. Hibernate robi to za nas.

Poza tym jest intuicyjny i łatwy do nauki. Wydaję się on być najlepszą technologią umożliwiającą dostęp do bazy danych, występującą obecnie na rynku.

•Bauer Ch., King G.:

Hibernate w akcji, popraw wydajność aplikacji bazodanowych w Javie

, Wydawnictwo HELION, Gliwice 2005.

•Minter D., Linwood J.:

Hibernate od Nowicjusza do Profesjonalisty

, Polish edition Copyright © 2007 by PowerNet.

• http://hibernate.org/ • http://www.javaworld.com/javaworld/jw-10-2004/jw-1018-hibernate.html

• http://czajkowski.waw.pl/html/groovygrails/index.php?option=com_content&view= article&id=14:hibernate-wprowadzenie&catid=8:hibernate&Itemid=7 http://www.mimuw.edu.pl/~sroka/archiwalne/2006j2ee/lab9/10/WWW/index.htm

• http://cvs.ii.uni.wroc.pl/~zsz/poo/hibernate.pdf

• http://jlaskowski.blogspot.com/2006/02/hibernate-tniemy-koszty-dostpu-do.html

• http://www.mimuw.edu.pl/~sroka/archiwalne/2006j2ee/lab9/8/WWW/hib.html#Wst ep • http://www.javapassion.com/handsonlabs/hibernatestepbystep/ • http://software.com.pl/spring-framework-3-0-tutorial-%E2%80%93-cz-2 %E2%80%93-baza-danych-walidacja-wiadomosci-encje-hibernate/