Einführung Projektseminar Informationssysteme – 14.05.2008 Objektrelationales Mapping Frank Huber Humboldt-Universität zu Berlin Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Allgemeines • Java: objektorientierte Sicht auf die Daten • Relationale Datenbanken: relationale Sicht auf die Daten: • nur Relationen • keine Typsicherheit • keine Vererbung • Problem: Abbildung nicht trivial • Lösung: O/R-Mapper Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Vorher-Nachher • Ohne O/R-Mapping • • • • Manuelles Connection-Handling SQL schreiben, um Daten zu holen Daten in Objekte kopieren/umwandeln SQL schreiben, um das Objekt zu verändern • Mit O/R-Mapping • • • • Datenbankverbindung wird vom Mapper bequem bereitgestellt POJO-Objekt* wird anhand seiner Klasse vom Mapper geladen POJO-Objekt wird über Setter verändert Mapper detektiert die Änderungen und schreibt sie bei einem commit in die Datenbank • Ergo: • Datenbankzugriff direkt über (gemappte) Java-Objekte • kein SQL mehr im Code • datenbankunabhängig Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Ansätze • Bytecode-Enhancement (z.B. Hibernate): • POJO-Classfiles werden zur Laufzeit um die MapperKontrollstrukturen erweitert • Ableitung von einer Superklasse (z.B. Cayenne): • POJOs werden von einer gemeinsamen Klasse abgeleitet, welche die Kontrollstrukturen enthält Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Bestandteile eines Cayenne-Mappings • Haupt-Konfigurationsdatei cayenne.xml • DomainMap: Mapping zwischen Klassen und Tabellen *DomainMap.map.xml • DomainNode: Konfiguration der physischen Datenquelle *DomainNode.driver.xml • cayenne.xml wird im Resource-Pfad gesucht Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Steps • Erstellen des Mappings • Konfiguration des Cayenne-Modelers - Verbinden mit der Datenbank • Reverse Engineering der Datenbank • "Flachklopfen" der n:m – Beziehung, d.h. 1:M und N:1 • Alles (Java-Klassen, Mapping-Files) am rechten Ort speichern • Verwenden von Cayenne • DataContext ist meist der Einstiegspunkt • Deployment dergestalt, dass DataContext immer an den aktuellen Request-Thread gebunden wird. Siehe Cayenne User Guide, Kapitel 12 • Zugreifen von Objekten über DataObjectUtils Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Ein paar Fallstricke • Datenbank für Cayenne-Primary-Key-Generierung vorbereitet? • getId() eines Objektes liefert nicht den Primary Key zurück. Dafür DataObjectUtils verwenden. • Cayenne überschreibt nie die "echten" Java-ModelFiles, selbst dann nicht, wenn keine Oberklasse angelegt wird • Cayenne-Hilfe für 1.2 nur im Cayenne Wiki Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Schluss • Selber lesen: http://cayenne.apache.org/ • modeling-inheritance Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Dritte Praktikumsaufgabe (Überblick) • Verstehen von O/R-Mapping • Erstellen eines O/R-Mappings für Cayenne • Verwenden des O/R-Mappers für den Datenbankzugriff • Massendaten • Lasttests Sommersemester 2008 Einführung Projektseminar Informationssysteme – 14.05.2008 Fragen? Sommersemester 2008