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

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Wstęp do strumieni danych
C++ wykład 2 ( ) Klasy i obiekty.
Programowanie obiektowe
Dzisiejszy wykład Wyjątki.
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Hibernate zapytania.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Generics w .NET 2.0 Łukasz Rzeszot.
Odwzorowanie obiektowo-relacyjne
Implementacja ekstensji klasy
Marcin Pamuła Mateusz Stefek
Serwery Aplikacji ASP .NET Web Objects Arkadiusz Popa.
Model – View - Controler
Data powstania: 2001 rok Autor i lider: Gavin King Najnowsza wersja: Licencja: Open Source.
Hibernate Klasy trwałe
Wykład 8 Wojciech Pieprzyca
Języki programowania obiektowego
.NET Remoting Łukasz Zawadzki.
Odwzorowania relacyjno-obiektowe Hibernate Klasy trwałe.
Hibernate relacje.
Hibernate uzupełnienie
System katalogowania. Opis i architektura.
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Podstawy programowania II
Inż. Łukasz Antoniak Promotor: dr inż. Piotr Gawrysiak Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych, 2010.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.
Java – coś na temat Klas Piotr Rosik
Seminarium problemowe
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Aplikacje bazodanowe ADO.NET PHP i MySQL
Komendy SQL do pracy z tabelami i bazami
Zpiratował Rafał Kaczyński. Jest to technologia pozwalająca mapować dane obiektowe na odpowiadające im struktury w bazach danych. Hibernate pozwala na.
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Marcin nowak, Wojciech baszczyk
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Piotr Czapiewski Wydział Informatyki ZUT Wykład 2.
Komendy SQL do pracy z danymi
Informatyka Stosowana – ROK II / III
Programowanie sieciowe w Javie Michał Kuciapski
Hibernate Podstawy.
Obiektowe metody projektowania systemów Adapter. Wstęp: „Dostosowanie interfejsu klasy do interfejsu, którego oczekuje użytkownik. Adapter umożliwia współprace.
XML w bazach danych.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Kolekcje (3) Zbiory. Porównywanie i porządkowanie elementów kolekcji. (c) Krzysztof Barteczko 2014.
do programowania obiektowego w języku Groovy
Implementacja asocjacji (z atrybutami i bez) przy użyciu: referencji (kolekcji referencji) tablic asocjacyjnych przygotował: Kamil Kowalczyk.
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Sławomir Civic Białek HIBERNATE.
Programowanie Obiektowe – Wykład 6
Wątki, programowanie współbieżne
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
PGO Interfejsy Michail Mokkas.
Technologie Informacyjne Bazy danych
PGO - Projektowanie i implementacja pierwszych klas
BYDGOSKI FESTIWAL NAUKI
PGO Dziedziczenie Michail Mokkas.
Programowanie w Javie 1 Dr Robert Kowalczyk
Tworzenie wątków w Javie
Zapis prezentacji:

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

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

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

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

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

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

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

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

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)

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, Getery i setery dla atrybutów klas, Konstruktor bezparametrowy. 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: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "

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: Tworzymy klasę Person:

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

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

Hibernate – zaawansowane zagadnienia Zapytania Zapytania Kryteria Kryteria HQL (Hibernate Query Language) - l/queryhql.html HQL (Hibernate Query Language) - l/queryhql.html Adnotacje Hibernate - e/en/html_single/ Adnotacje Hibernate - e/en/html_single/

Linki erence/en/html/index.html 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

Podsumowanie Dziękujemy za uwagę ;)