Transcript Slajd 1

Object-relational mapping

(aka O/RM, ORM, and O/R mapping)

Spis treści

 Co to jest ORM  Istota ORM  Problemy  Rozwiązania  NDO  Hibernate

ORM

 ORM to technika łącząca ze sobą relacyjne bazy danych i obiektowe języki programowana  W efekcie otrzymujemy wirtualne bazy danych obiektów  ORM: darmowe, komercyjne, własne

Istota ORM

 Istota ORM polega na przełożeniu obiektów na formę mogącą być przechowywaną w bazie danych, a następnie w łatwy sposób odzyskaną z zachowaniem właściwości obiektów i ich relacjami

Problemy

 Praca na obiektach, a zapis i odczyt z relacyjnej bazy danych  W relacyjnych BD używamy wielu tabel reprezentujących proste dane  Tworzenie złożonych zapytań, w celu uzyskania interesujących nas informacji

Rozwiązania

 Wielu programistów stara się na własną rękę programować rozwiązania (ORM), bez zapoznania się z już gotowymi  „ Aż trudno w to uwierzyć, kiedy utarło się twierdzić, że czas potrzebny na realizację projektu jest zazwyczaj niewystarczający.

” Jacek Laskowski

Rozwiązania

 Podejście obiektowe jest bardziej wydajne jeśli operuje na małej ilości danych (w pełni zachowana zgodność miedzy obiektami a bazą)  Operując na zapytaniach, które odnoszą się do dużej części bazy dostęp obiektowy nie jest wydajny

NDO (.NET Data Objects)

  NDO Standard Edition V. 1.2 (100 EUR) ORM dla Microsoft .NET

NDO: Zalety

     40-70% mniej kodu niż w przypadku programowania w ADO.NET

Obiekty pochodne dostarczane są automatycznie Własny język zapytań (możesz zapomnieć o skomplikowanych SELECT-ach) Rezultaty zapytań dostarczane są w listach obiektów Automatyczne zapisywanie do bazy danych (SQL Server2000/2005 , Access, Oracle, MySql, Firebird)

Hibernate – szkielet aplikacji

1.

Budowa klas do przechowywania danych (reprezentujących encje): public class Event { private Long id; private String title; private Date date; public Event() { } public Long getId() { return id; } private void setId(Long id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String getTitle() { return title; } public void setTitle(String title) {this.title = title;} }

Hibernate – szkielet aplikacji cd.

Są te proste Java Beany:   Getery i setery dla atrybutów klas, Konstruktor bezparametrowy.

2.

Pliki mapowań (konwencja nazewnictwa – NazwaKlasy.hbm.xml):

Hibernate – szkielet aplikacji cd.

Każdy plik z mapowaniem musi zaczynać się od: 3.

Konfiguracja Hibernate’a (hibernate.properties lub hibernate.cfg.xml): Zaczynamy od:

Hibernate – szkielet aplikacji cd.

Następnie np.: org.hsqldb.jdbcDriver jdbc:hsqldb:hsql://localhost sa 1 org.hibernate.dialect.HSQLDialect thread org.hibernate.cache.NoCacheProvider true create

Hibernate – szkielet aplikacji cd.

4.

Przykład zastosowania: import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtils { private static final SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } } public static SessionFactory getSessionFactory() { return sessionFactory; }

Hibernate – szkielet aplikacji cd.

public class Main { public static void main(String[] args) { Session session = HibernateUtils.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event event = new Event(); event.setDate(new Date()); event.setTitle("Hibernate course"); session.save(event); session.getTransaction().commit(); session = HibernateUtils.getSessionFactory().getCurrentSession(); session.beginTransaction(); Criteria criteria = session.createCriteria(Event.class); List events = criteria.list(); for (Iterator it = events.iterator(); it.hasNext();) { Event ev = (Event) it.next(); System.out.println(ev); } } session.getTransaction().commit(); }

Hibernate – szkielet aplikacji cd.

5.

Mapowanie relacji między encjami: Chcemy zmapować taką strukturę:  Tworzymy klasę Person:

Hibernate – szkielet aplikacji cd.

public class Person { private Long id; private int age; private String firstname; private String lastname; public Person() {} // getery i setery dla powyższych atrybutów

private Set events = new HashSet(); public Set getEvents() { return events; } public void setEvents(Set events) { this.events = events; }

}  Plik mapowania:

Hibernate – szkielet aplikacji cd.

 Dodanie pliku mapowania do pliku konfiguracyjnego Hibernate’a:

Przykładowe użycie: session = HibernateUtils.getSessionFactory().getCurrentSession(); session.beginTransaction(); Person aPerson = (Person) session.load(Person.class, 1L); Event anEvent = (Event) session.load(Event.class, 1L); aPerson.getEvents().add(anEvent); session.getTransaction().commit();

Hibernate – zaawansowane zagadnienia

 Zapytania  Kryteria  HQL (Hibernate Query Language) http://www.hibernate.org/hib_docs/v3/reference/en/htm l/queryhql.html

 Adnotacje Hibernate http://www.hibernate.org/hib_docs/annotations/referenc e/en/html_single/

Linki

 http://hibernate.org/  http://www.hibernate.org/hib_docs/v3/ref erence/en/html/index.html

 NHibernate  to O/R map or not To O/R map

Podsumowanie

Dziękujemy za uwagę ;)