Odwzorowanie obiektoworelacyjne

Podobne dokumenty
Odwzorowanie obiektowo-relacyjne

mgr inż. Michał Paluch

Dostęp do baz danych w aplikacjach Java EE

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Metody dostępu do danych

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Podejście obiektowe do relacyjnych baz danych Hibernate.

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Java Enterprise Edition spotkanie nr 6. przygotował Jacek Sroka. Java Persistence API

Co nowego w Java EE?

Co nowego w Java EE?

JAVA PERSISTENCE API CZĘŚĆ 2 ASPEKTY ZAAWANSOWANE. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

NHibernate Hibernate dla platformy.net. Hibernate posiada także dużą społeczność, zatem nietrudno uzyskać jakieś wsparcie w przypadku problemów.

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Programowanie obiektowe

Programowanie obiektowe

Podstawowe wykorzystanie Hibernate

Programowanie wielowarstwowe i komponentowe

Tworzenie aplikacji dla Oracle Application Server 10g R3 w technologii EJB 3.0

Hibernate. Adrian Gawor, Adam Klekotka, Piotr Kubisz. Technologie Biznesu Elektronicznego. 12 maja 2009

Oracle11g: Wprowadzenie do SQL

Metody dostępu do danych

Paweł Rajba

Odwzorowanie obiektowo-relacyjne. Wykład opracował: Tomasz Koszlajda

Programowanie w języku Java WYKŁAD

Obiektowe bazy danych

Post-relacyjne bazy danych

Enterprise JavaBeans 3.0

Hibernate. Od Nowicjusza do Profesjonalisty. Dave Minter Jeff Linwood

Obiektowe bazy danych

E:\DYDAKTYKA\ZAI\ZWWW\Laboratoria\L07\Java Persistence.doc 2011-lis-24, 17:0 Zaawansowane aplikacje internetowe Laboratorium Java Persistence.

Projektowanie aplikacji z bazami danych

JAVA PERSISTENCE API. Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika. Waldemar Korłub

Zaawansowane aplikacje internetowe - laboratorium

Hibernate mapowanie baz danych

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Nowy powiew od Słońca: EJB 3.0. Copyright Piotr Kochański & Erudis,

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Gdzie jest moja tabela?

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Zasady generowania kluczy głównych Język Java Persistence Podstawowa architektura wielowarstwowych aplikacji w oparciu o wzorce oprogramowania

Oracle PL/SQL. Paweł Rajba.

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Podstawy frameworka Spring

Java Persistence API - zagadnienia zaawansowane

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013

Java i bazy danych. 1. JDBC podstawy, transakcje. 2. Mapowanie relacyjno obiektowe. Hibernate, przykład.

Zaawansowane Techniki Bazodanowe

Język SQL, zajęcia nr 1

Metody dostępu do danych

Karolina Rusin, Paweł Biczysko, Michał Olejnik. 11 maja 2009

Relacyjne bazy danych. Podstawy SQL

1 Wprowadzenie do J2EE

Technologie odwzorowania obiektowo-relacyjnego: Hibernate. Plan prezentacji. Technologie dostępu do baz danych. z aplikacji J2EE

Microsoft SQL Server Podstawy T-SQL

Wielowarstwowe aplikacje internetowe - laboratorium

Wzorce dystrybucji i wspólbieżności autonomicznej

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Technologie dostępu do baz danych z aplikacji Javy:

Programowanie w Ruby

Technologia informacyjna

Kurs programowania aplikacji bazodanowych

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

EJB 3.0 (Enterprise JavaBeans 3.0)

JPA Java Persistance API

Hibernate. 1. Wprowadzenie. 2. Uruchomienie dostarczonego przykładu. 3. Własny przykład.

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

Wybierz kategorię Java Web i typ projektu Web Application. Kliknij przycisk Next >.

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Wzorce logiki dziedziny

ORM w Javie. Adam Michalik 2007

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Technologie odwzorowania. owania obiektowo-relacyjnego. relacyjnego: Hibernate

MSI dr. Inż. Mariusz Trzaska. obiektowych językach programowania

Relacyjne bazy danych. Podstawy SQL

Jarosław Kuchta Projektowanie Aplikacji Internetowych. Projektowanie warstwy danych

Programowanie w Ruby

Programowanie w języku Java. Bazy danych SQLite w Javie

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe

Podstawowe informacje o technologii Java Persistence API - przykład

Java Persistence API. Class powinny być zaznaczone. Kliknij przycisk Finish.

Paweł Kurzawa, Delfina Kongo

Programowanie w Ruby

Wprowadzenie do Doctrine ORM

JAVA bazy danych. na bazie: Język Java - Podstawy Programowania - Jacek Rumiński

Model semistrukturalny

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

15. Funkcje i procedury składowane PL/SQL

Transkrypt:

Odwzorowanie obiektoworelacyjne Wykład opracowali: Marek Wojciechowski i Tomasz Koszlajda Plan wykładu Techniki odwzorowania O/R JDBC Hibernate Java Persistence 1

Odwzorowanie obiektowo-relacyjne Odwzorowanie obiektowej architektury systemu informatycznego w relacyjne struktury danych bazy danych Aplikacja obiektowa Wielokąt #typfigury string #liczbawierzch integer +Powierzchnia() : Float +Przesuń(Float, Float) +DodajWierzch(Punkt) Middleware select * from Wielokąty insert into wielokąty values (w.typfigury, ) Relacyjna baza danych Wielokąty idwielokąta number(9) PK typfigury varchar(15) LiczbaWierzch number(3) wbaziedanych boolean Logiczny model danych logika biznesowa Odwzorowanie O/R Fizyczny model danych Techniki O/RM Dodanie do schematów relacji atrybutów implementacyjnych Utrzymywanie meta-danych opisujących reguły odwzorowania R/M Odwzorowanie sieci dziedziczenia klas Odwzorowanie związków między klasami Odwzorowanie atrybutów klas Strojenie wydajności odwzorowania 2

Atrybuty implementacyjne Oprócz odwzorowania atrybutów informacyjnych w O/RM niezbędne jest używanie dodatkowych atrybutów implementacyjnych Wielokąt #typfigury string #liczbawierzchołków integer +Powierzchnia() : Float +Przesuń(Float, Float) +DodajWierzchołek(Punkt) jestwierzchołkiem [3..*] [1] #X : Float #Y : Float Punkt +Kąt() : Float +Odległość() : Float +Przesuń(Float, Float) tworzkrawędźz [2] [2] Wielokąty idwielokąta number(9) PK typfigury varchar(15) LiczbaWierzchołków number(3) wbaziedanych boolean Punkty idpunktu number(10) PK idwielokąta number(9) FK X number(5,2) Y number(5,2) wbaziedanych boolean Klucze podstawowe i obce Zapewnienie trwałości danych Znaczniki czasowe Utrzymywanie meta-danych Schemat bazy danych należy rozszerzyć o informacje dotyczące logiki odwzorowania O/R: Zmienne obiektów atrybuty y relacji Związki atrybuty, tabele Atrybuty wielowartościowe obiektów tabele Konwersja typów danych Źródło danych klasa zmienna typ tabela kolumna typ Pracownik Nazwisko string Pracownicy Nazwisko varchar Pracownik Szef Pracownik Pracownicy Id_szefa number Pracownik JęzykiObce set(string) Języki_obce Nazwa String 3

Odwzorowanie sieci dziedziczenia Pracownik +etat: String +płaca: float +firma: Sring Dostępnych jest kilka metod odwzorowania: Osoba +imię : String +nazwisko : String +wiek : integer +płeć : Płeć {non complete, overlapping} Student +Uczelnia: String +Kierunek: String +rokstudiów: integer Odwzorowanie hierarchii klas w pojedynczą tablicę Odwzorowanie konkretnych klas w osobne tabele Odwzorowanie każdej klasy w osobną tabelę Odwzorowanie klas w uniwersalną strukturę tabel Odwzorowanie hierarchii klas w pojedynczą tabelę Osoby Imię Nazwisko Płeć Etat Płaca Firma Uczelnia Kierunek RokStudiów jeststudentem jestpracownikiem Własności: W tabeli będzie przechowywanych dużo zwartości pustych Tbli Tablica może ż osiągać ć duży ż rozmiar Łatwość przetwarzania polimorficznego Duża wydajność dla przetwarzania heterogenicznego Mała wydajność dla przetwarzania homogenicznego Mała wydajność dla modyfikacji struktury pojedynczych y klas Trudne utrzymywanie przynależności do typów Dobre dla prostych i płaskich hierarchii klas 4

Odwzorowanie konkretnych klas w osobne tabele Własności: Jeżeli klasa Osoba jest klasą abstrakcyjną Zależność między Trudna implementacja ę yp podzbiorami overlapping - danych typu complete implementacji konieczność wspólnej dziedziny dla kluczy relacji Pracownicy Studenci Mała wydajność dla przetwarzania idpracownika idstudenta polimorficznego Imię Imię Duża wydajność dla Nazwisko Nazwisko przetwarzania Płeć Etat Płaca Firma Płeć Uczelnia Kierunek RokStudiów homogenicznego Modyfikacja klasy z podklasami wymaga modyfikacji schematów wielu tabel Dobre dla rozłącznych podzbiorów rozszerzeń klas Odwzorowanie każdej klasy w osobną tabelę Pracownicy idosoby FK Etat Płaca Firma Osoby idosoby Imięę Nazwisko Płeć Studenci idosoby FK Uczelnia Kierunek RokStudiów Własności: Proste odwzorowanie 1:1 Łatwość przetwarzania polimorficznego Łatwe utrzymywanie dla modyfikacji nadklas i dodawania podklas Rozmiar struktur proporcjonalny do liczby danych Duża liczba tablic Mała wydajność przetwarzania homogenicznego Dobre dla pokrywających się podzbiorów rozszerzeń klas i często zmieniających się klas 5

Odwzorowanie klas w uniwersalną strukturę tabel Własności: Łatwość utrzymania dla zmian schematu Trudne i mało wydajne przetwarzanie Dobre dla złożonych aplikacji przetwarzających niezbyt duże zbiory danych Odwzorowanie cech klas Osoby +imię i : String +nazwisko : String +płeć : Płeć +liczbaosób : Integer Możliwe strategie: Jednokolumnowa i jednowierszowa tabela dla każdej cechy Wielokolumnowe i jednowierszowe tabele dla każdej z klas Wielokolumnowa i jednowierszowa tabela wspólna dla wszystkich klas Wielowierszowa tabela o generycznym schemacie wspólna dla wszystkich klas 6

Strojenie wydajności Strojenie mapowania struktur obiektowych na relacyjne: wybór strategii odwzorowania hierarchii dziedziczenia, związków i cech klas Opóźnione czytanie: dla dużych obiektów żądanie dostępu do obiektu może być realizowane jako odczyt jedynie podzbioru danych składających się na obiekt. Pozostałe części obiektu będą doczytane w momencie wystąpienia żądania dostępu do nich Oferta OR/M Lista produktów O/RM ObjectRelationalBridge (OJB) - projekt open source wspierający API ODMG and JDO TopLink - O/RM dla języka Java na serwery WWW EnterpriseObjectFramework (EOF) - framework używany w WebObjects na Apple JdoGenie - wydajna implementacja JDO ClassDbi - O/RM dla języka Perl HiberNate - projekt open source dla Javy ActiveRecord framework dla języka SQLObject framework dla języka Python EZPDO framework dla PHP5 Picasso - framework na platformę.net Gentle.NET - framework dla.net pisany w C# Genome - O/RM dla platformy.net and systemów SQL Server/Oracle AtomsFramework - framework dla VB6 and.net 7

JDBC - Java Database Connectivity Dostęp z poziomu języka Java do relacyjnej bazy danych Umożliwia ręczne wyłuskiwanie wartości danych Dostęp do bazy danych wymaga: Załadowania sterownika systemu bazy danych, którego wynikiem będzie dostęp do systemowego obiektu: DriverManager Zainicjowania połączenia z bazą danych za pomocą metody getconnection ti Connection mp = DriverManager.getConnection ( <URL>, <login>, <hasło> ); Dostęp do danych Dostęp do danych jest wykonywany za pomocą klasy: ResultSet Statement zapyt = mp.createstatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet wynik = zapyt.executequery( "SELECT etat FROM Pracownicy"); // wynik nie będzie pokazywał ł zmian wprowadzanych // przez innych i będzie modyfikowalny 8

Operacje za pomocą kursora Dostęp do konkretnych krotek wyniku wymaga zastosowania kursora: int x = 65041203789; String e = "Prezes"; while (wynik.next( )) { int Pesel = wynik.getint(1); if (Pesel = x) { String etat = wynik.updatestring(2,e); } } Dostęp do danych polega na przenoszeniu wartości między systemem danych bazy danych a systemem danych języka programowania Technologie O/RM O/RM = Object-Relational Mapping = odwzorowanie obiektowo-relacyjne Obejmują: API do zarządzania trwałością obiektów mechanizm specyfikowania metadanych opisujących odwzorowanie klas na relacje w bazach danych język lub API do wykonywania zapytań Popularne implementacje O/RM: Hibernate Oracle Toplink JDO 9

Hibernate Najpopularniejsza implementacja odwzorowania obiektowo-relacyjnego dla języka Java Obsługa asocjacji, kompozycji, dziedziczenia, polimorfizmu, kolekcji Wysoka wydajność i skalowalność Wiele sposobów zadawania zapytań Wykorzystuje siłę technologii relacyjnych baz danych Professional Open Source (JBoss Inc.) Obecnie jedna z implementacji standardu Java Persistence Architektura Hibernate Aplikacja Trwałe obiekty Hibernate Plik konfiguracyjny Definicje odwzorowania O/R Baza danych 10

Konfiguracja Hibernate 1 2 3 4 5 6 hibernate.cfg.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration ration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.datasource"> jdbc/sample</property> <property name="dialect"> l org.hibernate.dialect.oracledialect</property> <mapping resource="myhib/dept.hbm.xml"/> </session-factory> </hibernate-configuration> Specyfikacja klas trwałych obiektów Klasy encyjne występujące w logicznym modelu danych aplikacji Definiowane w formie Plain Old Java Object (POJO) Najlepiej posiadające sztuczny identyfikator public class Dept { private Long id; private String dname; Dept.java public void setid(long id) { this.id = id; } public Long getid() { return id; } public void setdname(string dname) { this.dname = dname; } public String getdname() { return dname; } } 11

Odwzorowanie O/R w Hibernate Definiowane w pliku lub plikach XML typowo odrębny plik dla każdej klasy zwyczajowe rozszerzenie.hbm.xml. Zorientowane na opis odwzorowania z punktu widzenia klasy Java, a nie tabeli Tworzone ręcznie lub generowane za pomocą narzędzi Pliki odwzorowania wskazywane w pliku konfiguracyjnym hibernate.cfg.xml lub bezpośrednio w aplikacji Przykład odwzorowania O/R 1 2 3 4 5 6 Dept.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping...> <hibernate-mapping package="myhib"> <class name="dept" table="dept"> <id name="id" type="long" column="deptno"> <generator class="sequence"> <param name="sequence">dept_seq</param> </generator> </id> <property name="dname" column="dname" type="string" not-null="true length=30/> </class> </hibernate-mapping> DEPT ------------------------- DEPTNO NUMBER PRIMARY KEY DNAME VARCHAR2(30) 12

Podstawowe interfejsy Hibernate API SessionFactory służy do tworzenia obiektów Session obiekt tworzony raz dla całej aplikacji Session jednostka pracy ( unit of work ) obsługuje trwałość obiektów Transaction transakcja w bazie danych najczęściej jedna w sesji Hibernate w akcji SessionFactory sf = 1 new Configuration().configure().buildSessionFactory(); 2 3... Session s = sf.opensession(); Transaction tx = s.begintransaction(); 4 Dept d = new Dept(); // ulotny d.setdname("marketing"); 5 s.save(d); save(d); // trwały 6 7 tx.commit(); s.close(); 13

Stany obiektu w Hibernate Ulotny (ang. transient) (new(), delete(), ) utworzony operatorem new, ale niezwiązany z sesją Trwały (ang. persistent) (save(), persist(), ) posiada identyfikator i reprezentację w bazie danych związany z sesją jego stan jest automatycznie synchronizowany z bazą danych Odłączony (ang. detached) (update(), ) obiekt, który był trwały, ale jego sesja się zakończyła można go modyfikować, a następnie związać z nową sesją Praca z obiektami w Hibernate Uczynienie obiektu trwałym: metoda save() obiektu Session Odczyt obiektu o znanym identyfikatorze: metody load() i get() obiektu Session Usunięcie obiektu: metoda delete() obiektu Session Modyfikacja trwałego obiektu metody setxxx() obiektu Synchronizacja obiektów odłączonych metody update(), saveorupdate() i merge() obiektu Session 14

Praca z obiektami - Przykłady Utworzenie i zachowanie obiektu Dept d = new Dept(); d.setdname( setdname("marketing"); Long genid = (Long) session.save(d); Odczyt i modyfikacja obiektu Dept d = (Dept) session.load(dept.class, new Long(20)); d.setdname("sales AND MARKETING"); Usunięcie obiektu Dept d = (Dept) session.load(dept.class, new Long(20)); session.delete(d); Zapytania w Hibernate Zapytania w języku HQL (Hibernate Query Language) składnia podobna do SQL zorientowany obiektowo zapytania odwołują się do klas, a nie tabel List depts = (List) session.createquery( "from Dept as dept where dept.dname = 'SALES'").list(); Zapytania w natywnym SQL Zapytania poprzez obiekty Criteria Zapytania poprzez obiekty Query By Example 15

Asocjacje w Hibernate 1:1, N:1, 1:N, N:M Z tabelą pośrednią (1:1, N:1, 1:N, N:M) lub bez (1:1, N:1, 1:N) Jednokierunkowe lub dwukierunkowe Możliwość kaskadowej propagacji operacji na obiekty zależne: none, all, save-update, delete, all-delete-orphan Przykład asocjacji w Hibernate (1/2) Dept Emp Emp.java public class Emp { private Long id; private String ename; private Dept dept;... } Emp.hbm.xml <class name="emp" table="emp">... <many-to-one name="dept" column="deptno" not-null="true"/> </class> 16

Przykład asocjacji w Hibernate (2/2) Dept Emp Dept.java public class Dept { private Long id; private String dname; private Set emps;... } Dept.hbm.xml <class name="dept" table="dept">... <set name="emps" inverse="true" cascade="all"> <key column="deptno"/> <one-to-many class="emp"/> </set> </class> Java Persistence Standard dotyczący zapewniania trwałości obiektów w aplikacjach Java EE i Java SE opracowany razem z EJB 3 stanowi część Java EE 5 Geneza standardu Java Persistence niepowodzenie koncepcji encyjnych EJB sukces technologii O/RM Rola Java Persistence na tle technologii O/RM oparty o odwzorowanie obiektowo-relacyjne definiuje standardowe API 17

Elementy standardu Java Persistence Interfejs programistyczny Java Persistence API Język zapytań Java Persistence Query Language Metadane o odwzorowaniu obiektowo-relacyjnym Encje Encja (ang. entity) to lekki obiekt służący do reprezentacji trwałych danych Typowo reprezentuje tabelę z relacyjnej bazy danych Typowo reprezentuje tabelę z relacyjnej bazy danych Definiowana w formie klasy encji i ewentualnie klas pomocniczych Wymagania dla klas encji: POJO z adnotacją @Entity bezargumentowy konstruktor (public lub protected) bezargumentowy konstruktor (public lub protected) implementacja Serializable, jeśli obiekty będą odłączane 18

Encja - Przykład @Entity 1 Blad.java @Table(name="BLEDY") 2 public class Blad implements Serializable { @Id 3 private Long id; private String kod; 4 private String opis; 5 public Blad() { } public Long getid() { return id; } 6 public void setid(long id) { this.id id = id; } public String getkod() { return kod; } public void setkod(string kod) { this.kod = kod; } public String getopis() { return opis; } public void setopis(string opis) { this.opis = opis; } } Związki między encjami Liczność 1:1 (@OneToOne) 1:N (@OneToMany) N:1 (@ManyToOne) N:M (@ManyToMany) Kierunkowość dwukierunkowe jednokierunkowe Kaskada operacji: PERSIST, MERGE, REMOVE, REFRESH, ALL 19

Związki między encjami - Przykład Wykonawca Album @Entity public class Wykonawca implements Serializable {... @OneToMany(cascade=CascadeType.ALL, mappedby="wykonawca") private Collection<Album> albumy;... } @Entity public class Album implements Serializable {... @ManyToOne private Wykonawca wykonawca;... } Zarządca encji (Entity Manager) Zarządca encji zarządzany przez kontener (EJB, JSF) wstrzykiwany do @PersistenceContext komponentu aplikacji EntityManager em; kontekst trwałości propagowany między komponentami w ramach transakcji JTA Zarządca encji zarządzany przez aplikację (serwlety,se) tworzony i niszczony przez aplikację każdy zarządca encji tworzy odrębny kontekst trwałości @PersistenceUnit EntityManagerFactory emf; EntityManager em = emf.createentitymanager(); 20

Jednostka trwałości (Persistence Unit) Definiuje zbiór klas encji zarządzanych przez EntityManager w aplikacji Obejmuje klasy encji z jednej bazy danych Definiowana w pliku konfiguracyjnym persistence.xml Posiada nazwę unikalną w zasięgu widzialności W aplikacjach Java EE wykorzystuje źródło danych obsługujące transakcje JTA nieobsługujące transakcji JTA W aplikacjach Java SE zawiera parametry połączenia JDBC 1 2 3 4 5 Plik persistence.xml - Przykład <?xml version="1.0" encoding="utf-8"?> <persistence version="1.0"...> persistence.xml <persistence-unit name="albumyjppu" transaction-type="jta"> <provider> oracle.toplink.essentials.ejb.cmp3.entitymanagerfactoryprovider </provider> <jta-data-source>jdbc/sample</jta-data-source> <properties> p <property name="toplink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence> 21

Cykl życia encji Instancje encji są zarządzane przez instancję EntityManager Stany instancji encji: nowa (ang. new) zarządzana (ang. managed) odłączona (ang. detached) usunięta (ang. removed) Utrwalanie instancji encji Metoda persist() obiektu EntityManager @PersistenceContext EntityManager em;... Blad b = new Blad(); b.setkod("b001"); b.setopis("niedozwolona operacja w module X"); em.persist(b); 22

Odczyt, odświeżanie i synchronizacja instancji encji z bazą danych Odczyt poprzez klucz główny: metoda find() Odświeżenie stanu z bazy danych: metoda refresh() Modyfikacje instancji: metody setxxx() encji Synchronizacja instancji odłączonej: metoda merge() Moment zapisu danych do bazy danych: automatycznie: gdy transakcja jest zatwierdzana jawnie: w wyniku wywołania metody flush() Strategia blokowania danych domyślnie blokowanie optymistyczne możliwość jawnego blokowania metodą lock() Usuwanie instancji encji Metoda remove() obiektu EntityManager @PersistenceContext EntityManager em;... Blad b = em.find(blad.class, new Long(13)); em.remove(b); 23

Transakcje EntityManager zarządzany przez kontener (EJB) kontener zarządza transakcjami EntityManager zarządzany przez aplikację transakcja JTA (serwlety) @Resource UserTransaction utx; utx.begin();... utx.commit(); // utx.rollback(); transakcja na poziomie zasobu (Java SE, serwlety) EntityManager em; em.gettransaction().begin();... em.gettransaction().commit(); // em.gettransaction().rollback(); Zapytania do bazy danych Rodzaje zapytań (metody obiektu EntityManager) dynamiczne w JPQL - createquery() dynamiczne natywne - createnativequery() nazwane (JPQL lub natywne) - createnamedquery() Parametryzacja zapytań nazwane (np. :kodbledu) pozycyjne (np.?1) Wykonanie zapytania (metody obiektu Query) getresultlist(), getsingleresult() executeupdate() 24

Zapytanie dynamiczne - Przykład EntityManager em;... List<Blad> wyn = null; Query q = em.createquery( "SELECT b FROM Blad b WHERE b.opis LIKE '%problem%'"); wyn = q.getresultlist(); Zapytanie nazwane - Przykład @Entity Blad.java @NamedQuery(name = "findbykeyword", query = "SELECT b FROM Blad b WHERE b.opis LIKE :keyword") public class Blad implements Serializable {... } EntityManager em;... List<Blad> wyn = null; wyn = em.createnamedquery("findbykeyword").setparameter("keyword", "%krytyczny%").getresultlist(); 25

Java Persistence Query Language (JPQL) Umożliwia formułowanie przenaszalnych zapytań, niezależnych od specyfiki poszczególnych systemów Zapytania operują na abstrakcyjnym schemacie obejmującym encje i związki między nimi Składnia podobna do SQL: zapytania SELECT-FROM-WHERE-GROUP BY-HAVING- ORDER BY polecenia UPDATE i DELETE dla masowych operacji modyfikacji i usuwania: UPDATE-SET-WHERE, DELETE- FROM-WHERE Wyrażenia ścieżkowe do nawigacji do związanych encji JPQL - Przykłady Nawigacja do kolekcji powiązanych instancji encji SELECT DISTINCT w FROM Wykonawca w, IN(w.albumy) a Wyrażenie ścieżkowe SELECT DISTINCT w FROM Wykonawca w JOIN w.albumy a SELECT a FROM Album a WHERE a.wykonawca.nazwa = Mandaryna 26

Podsumowanie Dostęp do baz danych w aplikacjach języka Java operujących na złożonym obiektowym modelu biznesowym realizowany jest w oparciu o technologie odwzorowania obiektowo-relacyjnego (O/RM) Powstało kilka technologii O/RM, z których największą popularność zyskał Hibernate Java Persistence to standard oparty o odwzorowanie obiektowo-relacyjne, definiujący standardowe API Java Persistence jest wynikiem prac nad EJB 3.0, ale może być i zakłada się że będzie wykorzystywany również bez połączenia z EJB Materiały dodatkowe Hibernate, http://www.hibernate.org/ The Java EE 5 Tutorial, http://java.sun.com/javaee/5/docs/tutorial/doc/ 27