Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Object-relational mapping (aka O/RM, ORM, and O/R mapping)

Podobne prezentacje


Prezentacja na temat: "Object-relational mapping (aka O/RM, ORM, and O/R mapping)"— Zapis prezentacji:

1 Object-relational mapping (aka O/RM, ORM, and O/R mapping)

2 Spis treści Co to jest ORM Co to jest ORM Istota ORM Istota ORM Problemy Problemy Rozwiązania Rozwiązania NDO NDO Hibernate Hibernate

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

4 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 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

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

6 Rozwiązania Wielu programistów stara się na własną rękę programować rozwiązania (ORM), bez zapoznania się z już gotowymi 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. ” „ Aż trudno w to uwierzyć, kiedy utarło się twierdzić, że czas potrzebny na realizację projektu jest zazwyczaj niewystarczający. ” Jacek Laskowski

7 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ą) 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 Operując na zapytaniach, które odnoszą się do dużej części bazy dostęp obiektowy nie jest wydajny

8 NDO (.NET Data Objects) NDO Standard Edition V. 1.2 (100 EUR) NDO Standard Edition V. 1.2 (100 EUR) ORM dla Microsoft.NET ORM dla Microsoft.NET

9 NDO: Zalety 40-70% mniej kodu niż w przypadku programowania w ADO.NET 40-70% mniej kodu niż w przypadku programowania w ADO.NET Obiekty pochodne dostarczane są automatycznie Obiekty pochodne dostarczane są automatycznie Własny język zapytań (możesz zapomnieć o skomplikowanych SELECT-ach) Własny język zapytań (możesz zapomnieć o skomplikowanych SELECT-ach) Rezultaty zapytań dostarczane są w listach obiektów Rezultaty zapytań dostarczane są w listach obiektów Automatyczne zapisywanie do bazy danych (SQL Server2000/2005, Access, Oracle, MySql, Firebird) Automatyczne zapisywanie do bazy danych (SQL Server2000/2005, Access, Oracle, MySql, Firebird)

10 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;} }

11 Hibernate – szkielet aplikacji cd. Są te proste Java Beany: Getery i setery dla atrybutów klas, Getery i setery dla atrybutów klas, Konstruktor bezparametrowy. Konstruktor bezparametrowy. 2. Pliki mapowań (konwencja nazewnictwa – NazwaKlasy.hbm.xml):

12 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: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

13 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

14 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; }

15 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(); }

16 Hibernate – szkielet aplikacji cd. 5. Mapowanie relacji między encjami: Chcemy zmapować taką strukturę: Tworzymy klasę Person: Tworzymy klasę Person:

17 Hibernate – szkielet aplikacji cd. Plik mapowania: Plik mapowania: 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; } }

18 Hibernate – szkielet aplikacji cd. Dodanie pliku mapowania do pliku konfiguracyjnego Hibernate’a: 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();

19 Hibernate – zaawansowane zagadnienia Zapytania Zapytania Kryteria Kryteria HQL (Hibernate Query Language) - http://www.hibernate.org/hib_docs/v3/reference/en/htm l/queryhql.html 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/ Adnotacje Hibernate - http://www.hibernate.org/hib_docs/annotations/referenc e/en/html_single/

20 Linki http://hibernate.org/ http://hibernate.org/ http://www.hibernate.org/hib_docs/v3/ref erence/en/html/index.html http://www.hibernate.org/hib_docs/v3/ref erence/en/html/index.html NHibernate NHibernate to O/R map or not To O/R map to O/R map or not To O/R map

21 Podsumowanie Dziękujemy za uwagę ;)


Pobierz ppt "Object-relational mapping (aka O/RM, ORM, and O/R mapping)"

Podobne prezentacje


Reklamy Google