Object Relational Mapping

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Objektrelationales Mapping mit JPA
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.
ER-Datenmodell und Abfragen in SQL
Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
JPQL Java Persistence Query Language
Objekt – Relationales – Modell Tomasz Makowski IN
MySQL.
Ruby on Rails im Überblick
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
SendEplanung Datenbank
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
XINDICE The Apache XML Project Name: Jacqueline Langhorst
SQL als Abfragesprache
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Transaction Script Software Component Technology for Distributed Applications.
Modellierung der Zugriffslogik auf Datenbanktabellen Software Component Technology for Distributed Applications Andreas Fink.
Datenintegrität Referentielle Integrität create table
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
JDBC: JAVA Database Connectivity
... und alles was dazugehört
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Herzlich Willkommen… welcome… soyez la bienvenue….
Wir bauen uns eine Webapplikation!
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 ADO.NET s.a:
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 9 Folie 2 ADO.NET (1) Klassen für Zugriffe.
Sesame Florian Mayrhuber
XML-Query. Übersicht Was ist XML-Query? Vergleich RDB XML-Dokument Syntaktisches und Use-Cases Kritik und Diskussion.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller.
SQL Überblick Abfragen aus einer Tabelle
Datenbanksysteme für hörer anderer Fachrichtungen
Einführung in Datenbankmodellierung und SQL
Esprit Database Suite Eine leistungsfähige Java-Persistzenzschicht zur einfachen Programmierung von Datenbankapplikation.
Referent: Stephan Metzler
XML und Datenbanken © 2006 Markus Röder
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Torque robert.resch-wolfgang.schneider. uebersicht Was ist Torque Komponenten von Torque Generator Erzeugte Klassen Methoden Torque in Turbine Demobeispiel.
Hibernate (OR-Mapping)
Datenbankanbindung mit
Structured Query Language
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
TDD mit MSTest Stefan Lieser Web:
Datenbank für Skriptenverkauf
Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk.
Datenbanken abfragen mit SQL
© 2012 TravelTainment Datenbankzugriffe in Java-Applikationen mit Hilfe des Spring Frameworks Simon Wirtz Seminarvortrag WS 13/14 Oktober 2013.
Modellierungsspezialisten DRITTE NORMALFORM! „Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
DOAG SID Data Warehouse
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Create Table, Rechte und Rollen
(Structured Query Language)
 Präsentation transkript:

Object Relational Mapping Stefan Lieser Email: stefan@lieser-online.de Web: www.lieser-online.de

Agenda Domain Driven Design Begriffsklärung und Konzepte Beispiele Mapping Metadaten Klassen Hierarchie auf Tabellen abbilden Locking, Transaktionen Beispiele „Zu Fuß“ mit ADO.NET NHibernate LINQ

Domain Driven Design Relevanter Ausschnitt der Welt wird in Form von business objects modelliert. Geschäftslogik und Regeln werden innerhalb der business objects als Methoden implementiert. Datenbankzugriffe werden NICHT in den business objects selbst implementiert sondern in einem Repository.

Impedance mismatch Relationale Datenbanken Mengen und Relationen als mathematische Grundlage Hoher Verbreitungsgrad (z.B. in „Legacy Anwendungen“) Reine Datenhaltung Objektorientierte Programmierung Sehr ausdrucksstark Daten und Operationen werden zusammengefasst Keine Persistenz Problembereiche Unterschiedliche Datentypen Klassenhierarchie auf Tabellen abbilden

Object Relational Mapper Object Relational Mapper ermöglichen einen automatisierten Übergang zwischen Objekten und relationalen Datenbanken. Mapping in Form von Metadaten Generieren von SQL Statements für CRUD (Create, Retrieve, Update, Delete) Kenntnisse in relationaler Datenbanktechnologie sind nach wie vor erforderlich.

Object Relational Mapper Code für Persistenz und Business Logik bleibt getrennt Datenbank Schema wird durch Mapping auf die Klassenstruktur abgebildet Bei Änderungen am Schema oder der Klassenstruktur muss lediglich das Mapping angepasst werden. Wechsel der Datenbankengine einfach möglich

Mapping Wohin mit den Metadaten? Attribute-based Mapping file Z.B. Java XDoclet, .NET Attribute Vorteil: direkt im Code integriert Nachteil: nicht sehr flexibel Mapping file XML Vorteil: sehr flexibel Nachteil: syntaktisch anspruchsvoll

Attribute-based Mapping     1     [Class(Table = "Addresses")]     2     public class Address2 {     3         private int m_Id;     4         private string m_Name;     5         private string m_Street;     6      7         [Id(0, TypeType = typeof(int), Column = "RecId")]     8         [Generator(1, Class = "native")]     9         public int Id {    10             get { return m_Id; }    11             set { m_Id = value; }    12         }    13     14         [Property()]    15         public string Name {    16             get { return m_Name; }    17             set { m_Name = value; }    18         }    19     }

Datei basiertes Mapping     1 <?xml version="1.0" encoding="utf-8"?>     2 <hibernate-mapping xmlns:xsd="http://www.w3.org/2001/XMLSchema"     3                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     4                   xmlns="urn:nhibernate-mapping-2.0">     5   <class name="ORM.Address, ORM" table="Addresses" dynamic-update="true" >     6     <id name="Id" column="RecID" type="System.Int32" access="field">     7       <generator class="native" />     8     </id>     9     <property name="Name" column="Name" type="System.String" access="field" />    10     <property name="Street" column="Street" type="System.String" access="field" />    11     <property name="Town" column="Town" type="System.String" access="field" />    12   </class>    13 </hibernate-mapping>

Klassen Hierarchie Mapping Table per concrete class Jede konkrete Klasse in einer eigenen Tabelle Table per class hierarchy Eine Tabelle für eine Klassenhierarchie, Unterscheidung des konkreten Typs über eine Discriminator Spalte Table per subclass Normalisierte Tabellenstruktur

Table per concrete class „Alle Zahlungen eines Kunden“ benötigt zwei Select‘s: SELECT * FROM Kreditkarte WHERE Kunde = 'Lieser' SELECT * FROM Abbuchung WHERE Kunde = 'Lieser'

Table per class hierarchy „Alle Zahlungen eines Kunden“ benötigt nur ein Select: SELECT * FROM Zahlung WHERE Kunde = 'Lieser' Einschränkung auf eine Zahlart über den Discriminator: SELECT * FROM Zahlung WHERE Zahlart = 'K'

Table per subclass „Alle Zahlungen eines Kunden“ mittels outer join: SELECT * FROM ZahlungDetail ZD LEFT JOIN KreditkarteDetail KD ON KD.ZahlungId = ZD.RecId LEFT JOIN AbbuchungDetail AD ON AD.ZahlungId = ZD.RecId WHERE ZD.Kunde = 'Lieser‚ Einschränkung auf eine Zahlart über inner join

Polymorphie Polymorphe Abfragen class A { ... } class X : A { ... } class Y : A { ... } select * from A Mapping für X und Y muss berücksichtigt werden Wenn X/Y jeweils in eigener Tabelle gespeichert sind, werden mehrere Tabellen abgefragt

Lazy vs. Eager Loading Lazy Load Eager Loading Eigenschaft eines Objektes wird erst aus der Datenbank geladen, wenn darauf zugegriffen wird. Das Nachladen muss innerhalb der gleichen Session geschehen in der das Objekt geladen wurde. Eager Loading Daten werden mittels JOIN sofort geladen Nur eine Collection kann per eager loading geladen werden, sonst würden (durch Kreuzproduktbildung) ggf. sehr große Datenmengen geliefert.

Traversing the object graph class A { public B b; public IList C; } A a; Save(a); b und C werden automatisch in die Datenbank übertragen sofern sie geändert wurden. Kann bei Bedarf abgeschaltet werden über ISession.FlushMode = FlushMode.Never;

Locking Pessimistic Optimistic Datensätze werden während ihrer Bearbeitung in der Datenbank gesperrt Nachteil: streng serieller Zugriff, dadurch evtl. schlechtes Antwortverhalten Optimistic Erst beim Aktualisieren der Datenbank wird geprüft ob die Daten von einem anderen Nutzer geändert wurden. Sehr gute Skalierbarkeit

Optimistic Locking Alle Spalten mit ihren vorherigen Werten vergleichen UPDATE Adressen SET Strasse='My way' WHERE RecId=5 AND Name='Lieser' AND Strasse='Way' Timestamp UPDATE Adressen SET Strasse='My way', Timestamp='22.08.2006 14:06:05:87' WHERE RecId=5 AND Timestamp='20.08.2006 11:34:53:96' Version UPDATE Adressen SET Strasse='My way', Version=Version + 1 WHERE RecId=5 AND Version=5

Unit of Work Logisch zusammenhängende Änderungen müssen als Transaktion ausgeführt werden Unit of Work als Pattern für Transaktionen Constructor der UnitOfWork startet die Transaktion Insert/Update/Delete Methoden ergänzen die Transaktion Commit beendet die Transaktion Im Fehlerfall wird ein Rollback ausgeführt

Unit Of Work

ORM „zu Fuß“ mit ADO.NET Für jede Klasse werden CRUD Operationen geschrieben. Vorgehensweise lässt sich mit Code Generatoren automatisieren.

NHibernate (LGPL) Basiert auf Hibernate 2.1 (Java) Mapping wahlweise über Attribute oder Datei Abfrage Criteria Hybernate Query Language (HQL) Query by Example

LINQ und ADO.NET Language Integrated Query ADO.NET Entity Framework Objektorientierte Abfragesprache In die Sprache (C# und VB) integriert Compile-time Prüfung (!) Nicht auf Datenbanken beschränkt ADO.NET Entity Framework Client Views als Indirektionsebene Migrationsweg für „alte“ ADO.NET Anwendungen

LINQ Beispiel var custs = from c in db.Customers where c.City == "London" select c; var custs = (from c in db.Customers where c.City == "London" select c) .Including(r => r.Orders);

Und Tschüss... Die PowerPoint Datei sowie die Beispiele finden Sie unter http://www.lieser-online.de