Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Hibernate Marcin Pamuła Mateusz Stefek. Plan prezentacji 1. Wstęp 2. EJB i JDBC a Hibernate 3. Architektura 4. Instalacja 5. Tworzenie najprostszej aplikacji.

Podobne prezentacje


Prezentacja na temat: "Hibernate Marcin Pamuła Mateusz Stefek. Plan prezentacji 1. Wstęp 2. EJB i JDBC a Hibernate 3. Architektura 4. Instalacja 5. Tworzenie najprostszej aplikacji."— Zapis prezentacji:

1 Hibernate Marcin Pamuła Mateusz Stefek

2 Plan prezentacji 1. Wstęp 2. EJB i JDBC a Hibernate 3. Architektura 4. Instalacja 5. Tworzenie najprostszej aplikacji hibernatowej 6. Możliwości Hibernata 7. Połączenie z Hibernata z JBOSSem 8 Podsumowanie

3 Wstęp 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 Hibernacie 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.

4 EJB i JDBC a Hibernate JDBC – pozwala na wykonywanie poleceń SQL-owych z poziomu kodu JAVY Entity Java Beans – komponent EJB odpowiada pewnemu zbiorowi obiektów w bazie danych Dlaczego Hibernate jest wygodniejszy?

5 Architektura Hibernata

6

7 Instalacja Opis instalacji Hibernata: - instalacja bazy danych na przykładzie PostgreSQL - ściągnięcie plików z klasami Hibernata - ściągnięcie drivera JDBC do PostgreSQL - konfiguracje

8 Tworzenie przykładowej aplikacji hibernatowej Klasy w Javie odpowiadające tabelkom XMLe z mapowaniami klas Konfiguracja Hibernata Tworzenie nowego obiektu i zapamiętanie go w bazie danych Wczytywanie obiektu z bazy danych Wykonywanie zapytań do bazy danych

9 Klasy w Javie odpowiadające tabelkom package events; public class Person { private Long id; private int age; private String firstname; private String lastname; public Person() {} // Accessor methods for all properties, private setter for 'id' }

10 XMLe z mapowaniami klas

11 Konfiguracja Hibernata org.hsqldb.jdbcDriver jdbc:hsqldb:hsql://localhost sa 1 org.hibernate.dialect.HSQLDialect thread org.hibernate.cache.NoCacheProvider create

12 Tworzenie nowego obiektu i zapamiętanie go w bazie danych private void createAndStoreEvent(String title, Date theDate) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event theEvent = new Event(); theEvent.setTitle(title); theEvent.setDate(theDate); session.save(theEvent); session.getTransaction().commit(); }

13 Wczytywanie obiektu z bazy danych i dokonywanie zmian private void loadAndUpdateEvent(Long personId, Long eventId, String t) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event anEvent = (Event) session.load(Event.class, eventId); anEvent.setTitle(t); session.saveOrUpdate(anEvent); session.getTransaction().commit(); }

14 Wykonywanie zapytań do bazy danych private List listEvents() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); List result = session.createQuery("from Event").list(); return result; }

15 Możliwości Hibernata W Hibernacie możemy zamodelować: Kolekcje Kompozycje Dziedziczenie Dodatkowe możliwości: HQL Zapytania SQLowe Kryteria

16 Kolekcje

17 Kolekcje – relacja jeden do wielu

18 Kolekcje – relacja wiele do wielu......

19 Kompozycje public class Person { private Name name; private String key; public String getKey() { return key; } private void setKey(String key) { this.key=key; } public Name getName() { return name; } public void setName(Name name) { this.name = name; }

20 Kompozycje public class Name { String first; String last; public String getFirst() { return first; } void setFirst(String first) { this.first = first; } public String getLast() { return last; } void setLast(String last) { this.last = last; }

21 Kompozycje

22 Dziedziczenie W Hibernacie mamy 3 sposoby na odwzorowanie dziedziczenia: Jedna tabela na klasę i klasy z niej dziedziczące Tabela na każdą klasę Tabela na każdą klasę nieabstrakcyjną

23 Tabela na schemat dziedziczenia

24 Tabela na każdą klasę

25 Tabela na każdą klasę nieabstrakcyjną

26 Hibernate Query Language (HQL) Hibernate jest wyposażony we własny, bardzo dobry język zapytań przypominający składnią SQL-a. Jednak w przeciwieństwie do niego, HQL jest językiem zorientowanym w pełni obiektowo, rozumiejącym mechanizmy dziedziczenia i polimorfizmu.

27 Hibernate Query Language (HQL) Składnia Złączenia Klauzula SELECT Klauzula WHERE Funkcje agregujące i operatory order by, group by podzapytania

28 Użycie HQLa List mothers = session.createQuery( "select mother from Cat as cat join cat.mother as mother where cat.name = ?").setString(0, name).list(); List kittens = session.createQuery( "from Cat as cat where cat.mother = ?").setEntity(0, pk).list();

29 Użycie HQLa Iterator results = sess.createQuery( "select cat.color, min(cat.birthdate), count(cat) from Cat cat " + "group by cat.color").list().iterator(); while ( results.hasNext() ) { Object[] row = (Object[]) results.next(); Color type = (Color) row[0]; Date oldest = (Date) row[1]; Integer count = (Integer) row[2];..... }

30 Zapytania SQL-owe Zapytania nazwane w plikach z mapowaniami ? ] ]> Query q = sess.getNamedQuery("eg.DomesticCat.by.name.and.minimum.weight"); q.setString(0, name); q.setInt(1, minWeight); List cats = q.list();

31 Zapytania SQL-owe Zapytania w kodzie klas List cats = session.createSQLQuery( "SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10", "cat", Cat.class ).list();

32 Kryteria Kryteria udostępniają programiście możliwość dynamicznego budowania zapytań. Ułatwiają też abstrahowanie od języka zapytań. Kryteria udostępniają metodę list, która zwraca listę wyników List studenci = sess.createCriteria(Student.class).list()

33 Kryteria List studenci = sess.createCriteria(Student.class).add(Restrictions.like("imie", "M%")).list() List studenci = sess.createCriteria(Student.class).add(Restrictions.sqlRestriction({alias}.imie like "M%")).list()

34 Kryteria List studenci = sess.createCriteria(Student.class).addOrder(Order.asc("imie").list() List pracownicy = sess.createCriteria(Pracownik.class).createCriteria("przelozony")..add(Restriction.like("imie", "Z").list()

35 Połączenie Hibernata z JBossem Chcemy tak skonfigurować serwer aplikacji, aby hibernate był dostępny jako usługa, a SessionFactory była widoczna w JNDI. 1. Skonfigurowanie Jbossa, tak aby używał odpowiedniego drivera JDBC 2. Skopiowanie plików cglib.jar, commons- collections.jar, commons-logging.jar, commons- lang.jar, jcs.jar,odmg.jar i hibernate.jar do ${HIBERNATE_HOME}/lib i ${JBOSS_HOME}/server/default/lib

36 Połączenie Hibernata z JBossem 1. Utworzenie archiwum SAR o następującej strukturze: 1. mojpakiet/Student.class 2. mappings/Student.hbm.xml 3. META-INF/jboss-service.xml

37 Połączenie Hibernata z JBossem 1. Jboss-service.xml jboss.jca:service=RARDeployer jboss.jca:service=LocalTxCM,name=MySqlDS mappings/Student.hbm.xml java:/hibernate/HibernateFactory java:/MySqlDS net.sf.hibernate.dialect.MySQLDialect

38 Połączenie Hibernata z JBossem net.sf.hibernate.transaction.JTATransactionFactory net.sf.hibernate.transaction.JBossTransactionManagerLookup false UserTransaction Po zdeplojowaniu wszystkie pisane przez nas komponenty mogą wyciąg SessionFactory z JNDI.

39 Podsumowanie 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.


Pobierz ppt "Hibernate Marcin Pamuła Mateusz Stefek. Plan prezentacji 1. Wstęp 2. EJB i JDBC a Hibernate 3. Architektura 4. Instalacja 5. Tworzenie najprostszej aplikacji."

Podobne prezentacje


Reklamy Google