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.:
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ę ;)