mapowanie obiektowo-relacyjne z wykorzystaniem...

31
Wirtualne przedsiębiorstwo II Mapowanie obiektowo-relacyjne z Łukasz Macierzyński 157588 Daniel Nikończuk 157621 Kacper Oko 157626 Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Upload: others

Post on 09-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Wirtualne przedsiębiorstwo II

Mapowanie obiektowo-relacyjne z

Łukasz Macierzyński 157588

Daniel Nikończuk 157621

Kacper Oko 157626

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Agenda

1. Co to jest mapowanie obiektowo-relacyjne (ORM)?

2. Relacyjne bazy danych kontra obiektowe.

3. Po co używać ORM ?

4. Pierwsze kroki w Hibernate

5. Konfiguracja Hibernate’a.

2/31

5. Konfiguracja Hibernate’a.

– Mapowanie za pomocą plików XML

– Mapowanie za pomocą adnotacji Javy

6. Prosty przykład.

7. Przykład w środowisku Eclipse.

8. Porównanie wydajności Hibernate’a i JDBC.

9. Faktyczne działania Hibernate’a.

10. Przykłady innych ORM.

11. Podsumowanie.

Cel wystąpienia

• Przedstawienie idei mapowania obiektowo-relacyjnego

3/31

• Zapoznanie słuchaczy z framework’iemHibernate

• Przedstawienie praktycznego zastosowania framework’a Hibernate

Co to jest mapowanie obiektowo-relacyjne (ORM)?

•• Mapowanie obiektowoMapowanie obiektowo--relacyjne relacyjne

(ang. Object-relational mapping)

jest to konwertowanie danych z tabel w

4/31

jest to konwertowanie danych z tabel w relacyjnej bazie danych na obiekty aplikacji klienckiej i na odwrót. Większość dzisiejszych aplikacji jest zorientowanych obiektowo, ale dane przechowuje się wciąż w relacyjnych bazach danych[1].

Co to jest mapowanie obiektowo-relacyjne (ORM)?

5/31Rysunek 1. Mapowanie obiektowo-relacyjne[2].

Relacyjne bazy danych kontra obiektowe bazy danych

• Relacyjne bazy danych są wciąż najbardziej popularne

• Obiektowe bazy danych nie są

6/31

• Obiektowe bazy danych nie są wystarczająco wspierane przez producentów SZBD

• Relacyjne bazy danych implementują szereg mechanizmów wspierających efektywną pracę

Po co używać ORM?

• Znaczne zredukowanie ilości pracy związanej z oprogramowaniem dostępu do danych

7/31

• Skorzystanie z zalet relacyjnych baz danych jednocześnie nie rezygnując z obiektowości programowania

• Uniezależnienie się od rodzaju DBMS’a

• Automatyczna obsługa transakcji i pulą połączeń z bazą

Hibernate - ORM framework

HibernateHibernate - framework do realizacji warstwy dostępu do danych. Hibernate zwiększa wydajność operacji na bazie

8/31

zwiększa wydajność operacji na bazie danych dzięki buforowaniu i buforowaniu i minimalizacji minimalizacji liczby przesyłanych zapytań. Jest to projekt rozwijany jako open sourceopen source.

Metody wytwarzania oprogramowania używając Hibernate’a oraz Hibernate Tools

• Top down (dobre dla już istniejącego kodu)– Zaimplementować model obiektowy Javy(JavaBeans)– Napisać plik mapujący ręcznie lub wygenerować go używając adnotacji – Wyeksportować tabele bazy danych używając Hibernate Tools

• Bottom up (dobre przy już istniejącej bazie)– Zacząć z istniejącym modelem danych

9/31

– Zacząć z istniejącym modelem danych– Użyć Hibernate Tools do wygenerowania plików mapujących– Użyć Hibernate Tools do wygenerowania namiastek kodu Javy– Wypełnić kod logiką biznesową

• Middle out (dobre przy nowym wytwarzaniu)– Wyrazić konceptualny model obiektowy bezpośrednio przez plik mapujący– Użyć Hibernate Tools do wygenerowania namiastek kodu Javy– Wypełnić kod logiką biznesową– Wyeksportować tabele bazy danych używając Hibernate Tools

• Meet in the middle (przy „przesiadce” z JDBC na Hibernate’a)– Zacząć z istniejącym modelem danych i istniejącymi klasami Javy– Napisać plik mapujący łączący dwa modele

Używanie Hibernate’a w kodzie

• Uzyskanie dostępu do obiektów persystentnych tak jak do normalnego obiektu POJO (Plain Old Java Object)

10/31

• Wykonywanie operacji DAO ( save, update, delete, etc.) do zapisywania zmian do bazy danych

Instalacja Hibernate’a

Najnowsza biblioteka Hibernate 3.5.1 http://www.hibernate.org/downloads.html

lub poprzez Maven’a.

11/31

Biblioteki potrzebne do przedstawianego przykładu:

• org.hibernate:hibernate-core

• org.hibernate:hibernate-annotations

• org.hibernate:hibernate-commons –annotations

Konfiguracja pliku hibernate.cfg.xml

<?xml version ="1.0" encoding ="utf-8"?><! DOCTYPEhibernate-configuration

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""http://hibernate.sourceforge.net/hibernate-configu ration-3.0.dtd" >

<hibernate-configuration ><session - factory name="SesjeHibernate" >

12/31

<session - factory name="SesjeHibernate" ><!-- local connection properties --><property name="hibernate.connection.url">jdbc:localhost:1433 </ property ><property name="hibernate.connection.driver_class">DriverDoBazy</ property ><property name="hibernate.connection.username">HibernateUser </ property ><property name="hibernate.connection.password">hibernate123! </ property ><!-- dialect for Microsoft SQL Server -->

<property name="dialect">org.hibernate.dialect.SQLServerDialect </ property ><property name="hibernate.show_sql">false </ property ><property name="hibernate.transaction.factory_class">

org.hibernate.transaction.JDBCTransactionFactory </ property ></ session-factory >

</ hibernate-configuration >

Klasa persytentna

public class Person{

private String name;private String surname ;

Plik Plik Person.javaPerson.java::

13/31

private String surname ;private int phoneNumber ;

public Person {}

//gettery i settery}

Klasa persytentna musi być tzw. bean’em.

Mapowanie za pomocą plików XML

<?xml version ="1.0"?><! DOCTYPEhibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate - mapping 3.0.dtd" >

Plik Plik Person.hbm.xmlPerson.hbm.xml::

14/31

"http://hibernate.sourceforge.net/hibernate - mapping 3.0.dtd" ><hibernate-mapping >

<class name="Person" table ="PERSONS"><id name="id" type ="int" column ="ID">

<generator class ="increment"/></ id ><property name="name"/><property name="surname" column ="SURNAME"/><property name="phoneNumber" column ="PHONE_NUMBER”

</ class ></ hibernate-mapping >

Mapowanie za pomocą adnotacji Javy

@Entity@Table(name = "Persons" )public class Person{

@Id@GeneratedValue @Column (name= "id" )private int id ;

Plik Plik Person.javaPerson.java::

15/31

private int id ;

@Column(name= "name" )private String name;

@Column(name= "surname" )private String surname ;

@Column(name= "phone_number" )private int phoneNumber ;

public Person(){

}

//dalej gettery i settery}

Po kolei w skrócie

1. Utworzenie pliku konfiguracyjnego i plików mapujących (lub adnotacji).

2. Utworzenie obiektu SessionFactory z obiektu Configuration.

16/31

Configuration.

3. Pobrać jedną sesje z SessionFactory.

4. Stworzyć zapytanie HQL.

5. Wykonać zapytanie dostając z powrotem np. listę obiektów javowych.

Przykład zapisu obiektu do bazy

Person naszObiekt = new Person( "Daniel" , "Kowalski" , 12312312);

Session session = newConfiguration().configure().buildSessionFactory().o penSession();

17/31

Transaction t = session.beginTransaction();

session.save(naszObiekt);

t.commit();

session.close();

Przykład odczytu

Session session = newConfiguration().configure().buildSessionFactory().o penSession();

Query qry = session.createQuery ( "from Person" );

18/31

Query qry = session.createQuery ( "from Person" );

ArrayList<Person> persons = (ArrayList<Person>) qry .list();

session.close();

HQL – Hibernate Query Language

• Dający ogromne możliwości obiektowy język zapytań

19/31

• Hibernate tłumaczy HQL do SQL’a

• Zapytania HQL są krótsze i bardziej czytelne niż odpowiedniki SQL

HQL – Hibernate Query Language

session.createQuery(

"from Person p where p.surname= :surname” ).

setString( "surname" , "Kowalski" );

20/31

session.createQuery(

"from Person p where p.phoneNumber= :number” ).

setInteger( „number" , „11122233444" );

Przykład w środowisku Eclipse

21/31

Porównanie wydajności

• Ładowanie i wyświetlanie bitmapy

– Za pomocą Hibernate’a

22/31

– Za pomocą Hibernate’a

– Za pomocą JDBC

• Porównanie czasów wykonania pracy

Faktycznie działania Hibernate’a

• Prezentacja audytów środowiska

MS SQL Server

23/31

MS SQL Server

Zalety Hibernate’a

• Dowolna klasa może reprezentować encje

• Wygodne i intuicyjne mapowaniez wykorzystaniem plików XML lub

24/31

z wykorzystaniem plików XML lub adnotacji (od Hibernate 3.0)

• Automatyczna optymalizacja = wydajność

• Mniej kodu = mniej błędów

Wady Hibernate’a

• Posiada do tej pory wiele usterek

• Wsparcie techniczne i dokumentacja Hibernate’adostępna w Internecie jest niewystarczająca.

• Dla złożonych danych, mapowanie z obiektu do

25/31

• Dla złożonych danych, mapowanie z obiektu do tabeli i vice versa zmniejsza wydajność i zwiększa czas konwersji.

• Hibernate nie pozwala używać niektórych zapytań, które są dostępne w JDBC, np. nie pozwala wstawiać wiele obiektów do tej samej tabeli używając jednego zapytania.

Hibernate – czy zawsze warto ?

Używanie Używanie Hibernate’aHibernate’a jest jest przesądaprzesąda dla aplikacji, które:

• są proste i używają jednej bazy danych, która nigdy się nie zmieni

• wstawiają dane bezpośrednio do tabel, poza tym nie

26/31

• wstawiają dane bezpośrednio do tabel, poza tym nie używa żadnych innych zapytań SQL

• nie ma w niej żadnych obiektów, które są zmapowane na dwie rożne tabele

Hibernate w takim przypadku zwiększa niepotrzebnie liczbę warstw i złożoność aplikacji. Dla takich aplikacji najlepszym wyborem jest JDBC.

Przykłady innych ORM

•• JavaJava– TopLink (Oracle)

– EclipseLink,

– iBATIS

27/31

– iBATIS

– Java Data Objects (JDO)

– Java Persistence API (JPA)

– Torque

– Cayenne

– Carbonado

– Enterprise Objects Framework, (MAC OS X)

– KeyAccess

Przykłady innych ORM cd.

•• .NET.NET– NHibernate

– Entity Framework by Microsoft

– SubSonic

28/31

– SubSonic

– NetTiers

– CodeSmith

– LINQ to SQL

– ObjectMapper .NET

– iBATIS

•• …własny ORM …własny ORM ☺☺

Podsumowanie

• Używanie framework’ów ORM daje mnóstwo korzyści, lecz nie zawsze warto ich używać

• Hibernate jest jednym z najpopularniejszych framework’ów ORM (Java oraz .NET) chociaż nie

29/31

framework’ów ORM (Java oraz .NET) chociaż nie jest wolny od wad

• Hibernate wspiera wiele narzędzi dla różnych środowisk (Ant, Maven, narzędzia Eclipse’a)

Bibliografia

1. http://www.pcmag.com/encyclopedia_term/0,2542,t=object-relational+mapping&i=55645,00.asp (2010-04-20)

2. http://ms-groups.pl/tgnet/Materiay2/Ból Andrzej 'ENTITY FRAMEWORK W PRAKTYCE'/Andrzej_Bol_Entity Framework 3.ppt (2010-04-20)

30/31

3.ppt (2010-04-20)

3. http://lux.dmcs.pl/oro/Wykladh1.ppt (2010-04-20)

4. http://confluence.sakaiproject.org/download/attachments/44794065/PersistenceHibernate.ppt (2010-04-21)

5. http://biblestudygroupatlas.googlecode.com/files/Hibernate-1x2.pdf (2010-04-21)

Pytania

31/31