Kurs programowania aplikacji bazodanowych



Podobne dokumenty
Oracle PL/SQL. Paweł Rajba.

Programowanie wielowarstwowe i komponentowe

Programowanie obiektowe

Podejście obiektowe do relacyjnych baz danych Hibernate.

Projektowanie aplikacji z bazami danych

Kurs programowania aplikacji bazodanowych

PHP 5 język obiektowy

Wykład 8: klasy cz. 4

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Podstawowe wykorzystanie Hibernate

PHP: bazy danych, SQL, AJAX i JSON

Metody dostępu do danych

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Systemy baz danych. mgr inż. Sylwia Glińska

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Baza danych. Modele danych

Baza danych sql. 1. Wprowadzenie

Wzorce dystrybucji i wspólbieżności autonomicznej

Bazy danych - wykład wstępny

Podstawy programowania III WYKŁAD 2

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

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Relacyjne bazy danych. Podstawy SQL

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

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

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

Krzysztof Kadowski. PL-E3579, PL-EA0312,

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

Oracle PL/SQL. Paweł Rajba.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

Systemy GIS Tworzenie zapytań w bazach danych

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Oracle PL/SQL. Paweł Rajba.

Serwery aplikacji. dr Radosław Matusik. radmat

Technologie obiektowe

Definiowanie własnych klas

Backend Administratora

Materiały do zajęć VII

Podstawowe pakiety komputerowe wykorzystywane w zarządzaniu przedsiębiorstwem. dr Jakub Boratyński. pok. A38

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

Oracle11g: Wprowadzenie do SQL

INTENSE PLATFORM Zmiany w wersji Wersja 7.2

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Moduł mapowania danych

Relacyjne bazy danych. Podstawy SQL

Podręcznik użytkownika produktu WebSphere Adapter for Oracle E-Business Suite Wersja 7, wydanie 0, pakiet składników Feature Pack 2

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Przykłady pytań do zaliczenia programu wykonywanego w ramach zajęć laboratoryjnych 6-8 z Programowania komponentowego w Javie. Zofia Kruczkiewicz

Baza danych. Baza danych to:

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe

Wykład 5: PHP: praca z bazą danych MySQL

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

QUERY język zapytań do tworzenia raportów w AS/400

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

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

KORPORACYJNE SYSTEMY ZARZĄDZANIA INFORMACJĄ

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Plan. Raport. Tworzenie raportu z kreatora (1/3)

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

METODY INŻYNIERII WIEDZY ASOCJACYJNA REPREZENTACJA POWIĄZANYCH TABEL I WNIOSKOWANIE IGOR CZAJKOWSKI

Bazy danych TERMINOLOGIA

TEMAT : KLASY DZIEDZICZENIE

4. Podstawowa konfiguracja

Diagramy klas. dr Jarosław Skaruz

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

Metody dostępu do danych

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

System zarządzania firmą specyfikacja techniczna.

Materiały do laboratorium MS ACCESS BASIC

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

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

3.4. Opis konfiguracji layoutów.

Aplikacje w środowisku Java

Bazy danych Access KWERENDY

Przestrzenne bazy danych Podstawy języka SQL

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET

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

Programowanie obiektowe

Database Connectivity

Współbieżność w środowisku Java

Instrukcja laboratoryjna

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

6. Formularze tabelaryczne, obiekty nawigacji - rozgałęzienia

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Transkrypt:

Wykład 5 Instytut Informatyki Uniwersytet Wrocławski

Plan wykładu Wprowadzenie do XPO Podstawowe obiekty Utrwalanie obiektów Transakcje i współbieżność Wzorzec unit of work Odwzorowanie dziedziczenia Asocjacje Pobieranie danych Leniwe poobieranie danych Stronicowanie

Wprowadzenie do XPO Produkt firmy Developer Express http://www.devexpress.com/ jeden z wielu produktów Produkt nie jest darmowy Integracja tylko z.net ORM, w którym aplikacje pisze się bardzo łatwo i szybko Bazy danych wspierane przez XPO: Advantage, Asa, Ase, DB2, Firebird, MSAccess, MSSqlServer, MSSqlServerCE, MySQL, Oracle, Pervasive, Postgres, SQLite, VistaDB

Podstawowe obiekty XpoDefault Zawiera domyślne ustawienia Pozwala korzystać z XPO bez żadnych konfiguracji DataLayer domyślnie bazą danych będzie lokalnie utworzony plik MDB Odpowiada funkcjonalnością SessionFactory z Hibernate Jego utworzenie jest kosztowne Zawiera konfigurację dostępu do danych oraz pliki mapujące Mamy dwie podstawowe implementacje SimpleDataLayer pozwala modyfikować metadane podczas działania aplikacji ThreadSafeDataLayer pozwala na dostęp do danych wielu wątkom równocześnie

Podstawowe obiekty Session Odpowiada funkcjonalnością Session z Hibernate Jego utworzenie jest szybkie Przy tworzeniu sesji możemy wskazać odpowiedni DataLayer Mamy do dyspozycji sesję domyślną XpoDefault.Session oraz sesje użytkownika XPCollection Kolekcja reprezentująca utrwalone obiekty Jest powiązana z typem obiektu i z sesją

Utrwalanie obiektów Mamy kilka sposobów na wskazanie, że dane obiekty będą utrwalane: Opatrzenie klasy atrybutem Persistent Zdefiniowanie klasy podrzędnej na XPBaseObject Zdefiniowanie klasy podrzędnej na XPCustomObject Zdefiniowanie klasy podrzędnej na XPObject Implementacja przez klasę interfejsów IXPObject, IComparable Podstawowe operacje na obiektach session.save(o) zapisanie lub aktualizacja obiektu session.delete(o) usunięcie obiektu

Utrwalanie obiektów Atrybuty sterujące utrwalaniem PersistentAttribute Ustawia daną klasę, właściwość lub pole do utrwalenia Podając Persistent( nazwa ) można określić nazwę, na która klasa/właściwość/pole będzie mapowane PersistentAliasAttribute Ustawia właściwość jako ulotną, a jej wartość będzie obliczana z wyrażenia przekazanego do aliasu, opartego na trwałych właściwościach Przykład: [PersistentAlias("UnitPrice*Qty*(1-Discount)")] public decimal ExtendedPrice { get { return Convert.ToDecimal(EvaluateAlias("ExtendedPrice")); } }

Utrwalanie obiektów Atrybuty sterujące utrwalaniem c.d. NonPersistentAttribute Ustawia daną klasę, właściwość lub pole jako ulotne SizeAttribute Określa rozmiar kolumny tekstowej w bazie danych Podanie jako parametru stałej SizeAttribute.Unlimited powoduje utworzenie w bazie danych pola typu CLOB lub TEXT zależy do DBMS

Przykłady DataLayerExample PersistenceExample

Transakcje i współbieżność Realizowane są dwa modele współbieżności: Optymistyczna. Model ten uniemożliwia jednoczesną zmianę tego samego obiektu przez dwa procesy. W momencie odczytywania danych obiektu, pobierana jest także wartość systemowego pola OptimisticLockField (pola blokady). Przy próbie zapisania zmodyfikowanego rekordu porównywana jest bieżąca wartość pola OptimisticLockField z tą pobraną przy wczytywaniu obiektu. Jeśli są różne, rzucany jest wyjątek. Ostatni wygrywa. Wiążąca jest ostatnia aktualizacja rekordu.

Transakcje i współbieżność Transakcje są w ramach sesji. Do obsługi są metody Session.BeginTransaction() Session.CommitTransaction() Session.RollbackTransaction() Aby sprawdzić, czy sesja jest w trakcie transakcji: Session.InTransaction (read-only property) Przykładowa konstrukcja: using (Session session = new Session()) { session.begintransaction(); try { // Create, update or delete objects session.committransaction(); } catch { session.rollbacktransaction(); throw; } }

Unit of Work Zmiany w obiektach są rejestrowane po stronie klienta W momencie zatwierdzenia, całość jest wysyłana do bazy d. W XPO mamy obiekty UnitOfWork i NestedUnitOfWork Utworzenie UnitOfWork powoduje: utworzenie nowej sesji rozpoczęcie nowej transakcji Typowe użycie: using ( UnitOfWork uow = new UnitOfWork ) { // Przetwarzanie obiektów uow.commitchanges(); }

Unit of Work Można też tworzyć zagnieżdżone konstrukcje Unit of Work Używamy wtedy obiektu NestedUnitOfWork Typowa konstrukcja: using ( UnitOfWork uow = new UnitOfWork ) { // Przetwarzanie obiektów using (NestedUnitOfWork uownested = uow.beginnestedunitofwork()) { // Zagnieżdżone przetwarzanie uownested.commitchanges(); } uow.commitchanges(); } Zmiany są zatwierdzane metodą uow.commitchanges() Wykonanie CommitChanges() dla zagnieżdżonego unit of work nic tak naprawdę nie robi Zatwierdzenie zmian następuje w zewnętrznym obiekcie UnitOfWork.

Przykłady ConcurrencyExample TransactionExample UnitOfWorkExample

Odwzorowanie dziedziczenia XPO realizuje dwa schematy odzworowania: Tabela na hierarchię klas Tabela na każdą klasę (domyślne) Do ustawienia sposobu dziedziczenia jest atrybut MapInheritanceAttribute, natomiast wartości dostępne są w atrybucie MapInheritanceTypeAttribute

Przykłady InheritanceExample1 InheritanceExample2

Asocjacje Do ustalania relacji służy atrybut AssociationAttribute Atrybut ma dwa konstruktory AssociationAttribute(string name) AssociationAttribute(string name, Type elemtype) Obiekt, który może mieć wiele odwołań do innych obiektów powinien mieć zdefiniowaną kolekcję tych elementów, czyli odpowiedni element XPCollection Przy zapisywaniu obiektu, który zawiera niezapisane odwołania do innych obiektów, te niezapisane obiekty zostaną automatycznie zapisane Ale niekoniecznie zaktualizowane

Asocjacje Zapisywanie grafu obiektów Domyślne zachowanie przy wywołaniu o.save() zapisywany jest sam obiekt o zapisywane są wszystkie nowe obiekty, na które wskazuje obiekt o obiekty zmienione, które są wskazywane przez obiekt o będą zapisane, jeśli jest uruchomiony trace zmian (w property set jest wywoływana metoda OnChange) Zachowanie to można zmienić poprzez ustawienie atrybutu Aggregated w obiekcie, który ma kolekcję na obiekty zawierające odwołania do tej kolekcji: zapisywany jest sam obiekt o zapisywane są wszystkie obiekty, na które wskazuje obiekt o (bezwzględnie)

Asocjacje Realizacja asocjacji jeden-do-wiele W klasie parenta ustawiamy [Association("ParentChild")] public XPCollection<Child> Childs { get { return GetCollection<Child>("Childs"); } } W klasie childa ustawiamy [Association("ParentChild")] public Parent ParentId; Realizacja asocjacji wiele-do-wiele W klasie Location ustawiamy [Association("LocationsDepartments", typeof(department))] public XPCollection Departments { get { return GetCollection("Departments"); } } A w klasie Department [Association("LocationsDepartments", typeof(location))] public XPCollection Locations { get { return GetCollection("Locations"); } } W efekcie powstanie tabela łącząca: Klasa1Kolekcja2 Klasa2Kolekcja1, czyli LocationLocations DepartmentDepartments

Przykłady AssociationOneToOne AssociationOneToManyExample AssociationOneToManyExample2 AssociationOneToManyExample3 AssociationManyToManyExample

Pobieranie danych W XPO mamy dwa główne sposoby pobierania danych: Za pomocą pseudojęzyka SQL Za pomocą języka obiektowego Poprzez identyfikator obiektu Pobierając dane definiujemy kryteria oraz sposoby sortowania Możemy też zdefiniować filtr, czyli kryteria po stronie klienta Wyniki zapytań mogą być reprezentowane za pomocą następujących obiektów: XPCollection, XPCursor, XPView Kryteria są reprezentowane przez obiekt klasy CriteriaOperator Aby utworzyć obiekt kryteriów na podstawie pseudojęzyka odpalamy metodę CriteriaOperator.Parse()

Pobieranie danych Charakterystyka kolekcji reprezentujących wyniki XPCollection Reprezentuje kolekcję trwałych obiektów Istotniejsze właściwości Count Criteria, CriteriaString, Filter SelectDeleted Sorting, TopReturnedObjects Tworzenie obiektu: XPCollection<Beer> xp = new XPCollection<Beer>(session); XPCollection xp = new XPCollection(session, typeof(example.beer));

Pobieranie danych Charakterystyka kolekcji reprezentujących wyniki XPCursor Nie pobiera wszystkiego za jednym razem, tylko po kawałku ten kawałek jest określany przez parametr PageSize Istotniejsze właściwości Count, PageSize, SelectDeleted, Sorting, TopReturnedObjects Kryteria zapytania możemy określić w wybranych konstruktorach podczas tworzenia obiektu XPCursor jest ukierunkowany na optymalne wykorzystanie pamięci, przez co jest wolniejszy. Teoretycznie XPCollection jest znacznie szybszy, ale w testach wyszło, że XPCursor jest tylko nieznacznie wolniejszy.

Pobieranie danych Charakterystyka kolekcji reprezentujących wyniki XPView Reprezentuje wynik zapytania SQL Jest w trybie tylko-do-odczytu Dostępne właściwości są definiowane samodzielnie reprezentowane przez właściwość Properties Istotniejsze właściwości i metody Count, Criteria, CriteriaString, Filter Properties, Sorting, TopReturnedRecords AddProperty() Klasy ViewProperty i ViewRecord

Pobieranie danych Klasy do budowania obiektowych zapytań AggregateOperand reprezentuje funkcje agregujące MIN, MAX, SUM, itd. BetweenOperator reprezentuje operator BETWEEN BinaryOperator służy do porównywania dwóch wartości GroupOperator reprezentuje operatory AND i OR InOperator reprezentuje operator IN UnaryOperator reprentuje operatory jednoargumentowe NOT, ISNULL, itd. OperandProperty reprezentuje właściwość OperandValue reprezentuje wartość

Pobieranie danych Sortowanie Do definiowania sortowania mamy klasę SortProperty Istotniejsze właściwości klasy SortProperty PropertyName Direction o wartościach DevExpress.Xpo.DB.SortingDirection.Ascending DevExpress.Xpo.DB.SortingDirection.Descending Do metod pobierających dane zwykle przekazuje się: Pojedynczy obiekt lub tablicę obiektów SortProperty Obiekt SortingCollection Tworzymy go i wypełniamy za pomocą schematu: SortingCollection sc = new SortingCollection(); sc.add( sortproperty1 ); sc.add( sortproperty2 );...

Przykłady QueryingDatastore1 QueryingDatastore2

Leniwe pobieranie danych Przy wczytywaniu obiektu, domyślnie wczytywane są wszystkie jego pola Dotyczy to także pól kluczy obcych (ale nie dotyczy kolekcji) To domyślne zachowanie można zmienić stosując technikę leniwego pobierania danych Przykładowy schemat właściwości leniwie pobieranej: private XPDelayedProperty description = new XPDelayedProperty(); [Delayed("description")] public string Description { get { return Convert.ToString( description.value ); } set { description.value = value; } } Technikę możemy także stosować do pól kluczy obcych

Przykład LazyLoading

Stronicowanie Wczytywanie ze stronicowaniem należy wykonywać za pomocą XPCursor lub XPCollection Użycie XPCursor jest kosztowne, gdy chcemy pobrać jedną z ostatnich stron Alternatywą jest stronicowanie istniejącego XPCollection Odbywa się z wykorzystaniem XPageSelector Ustawiamy Powiązanie z odpowiednią kolekcją XPCollection oraz PageSize (rozmiar strony) i CurrentPage (numer strony) W XPCollection widoczne są tylko rekordy określone przez ustawione parametry. Z bazydanych pobierane są identyfikatory wszystkich rekordów Następnie pobierane są dane wybranej strony

Przykład PagingExample