e-movimento Software Design & Beratung GmbH1030 Wien ● Marxergasse 7/26 ► www.e-movimento.comObjekt-Relationales MappingVo...
Vorstellung Name: DI Sebastian Dietrich Tätigkeiten: Java-Softwareentwickler & Softwarearchitekt Teamleiter & Scrum-Ma...
► www.e-movimento.com, Sebastian Dietrich3Objekt-Relationales MappingWarum überhaupt objektorientiert?http://www.tiobe.com
► www.e-movimento.com, Sebastian Dietrich4Objekt-Relationales MappingWarum überhaupt relational?http://www.joinvision.com
Objekt-Relationales MappingUnterschiede Objektorientiert – RelationalOO Konzepte Vererbung Polymorphie Kapselung Objek...
Unterschiede Objektorietiert – RelationalObject-Relational Impedance Mismatch Ein gutes Objektmodell… Ist optimiert für ...
Object-Relational Impedance MismatchUnterschiede Struktur: Objekt = Daten + Verhalten, Vererbung Instanz: Objektzustand ...
Object-Relational Impedance MismatchLösung Unterschiedliche Lösungsansätze: Objektorientierte Datenbanken Objektbasiert...
Object-Relational Impedance MismatchAbbildung von Vererbung OO  RDB Abbildung von Vererbung = Ein Teilaspekt des ORIM N...
Abbildung von Vererbung OO  RDBLösungswege „Single Table“, „Table per class-hierarchy“, „Filter-Mapping“ 1 Tabelle für ...
Abbildung von Vererbung OO  RDBWeitere Lösungswege „General" = Generelle Tabellen Eine Tabelle für Klassen Eine für Be...
Abbildung von Vererbung OO  RDBVor- und Nachteile "Single Table" DB Struktur typisch für RDBs einfacher für DBAs- Verb...
Objekt-Relational Impedance MismatchFaulheitsprinzip Das Rad nicht neu erfinden: Mein Programm ist nicht daserste, das a...
JDBCmyBATISDBEasyBeans, TopLink,OpenJPA, EclipseLink,Cayenne, Hibernate,DataNucleusJBoss, WebSphere, OC4J,Geronimo, Glassf...
► www.e-movimento.com, Sebastian Dietrich15Persistenzlayer und OR Mapper in JavaHibernate Hibernate = OR Mapper von JBoss...
► www.e-movimento.com, Sebastian Dietrich16AppHibernatePersistenzlayer und OR Mapper in JavaHibernate Architektur Transie...
► www.e-movimento.com, Sebastian Dietrich17Persistenzlayer und OR Mapper in JavaHibernate Beispiel Tabelle KUNDE: Java K...
► www.e-movimento.com, Sebastian Dietrich18Hibernate BeispielMapping von Vererbung mittels Annotations Table per Subclass...
► www.e-movimento.com, Sebastian Dietrich19Vielen Dank für Ihre Aufmerksamkeit!Q&A[Sebastian Dietrich]Sebastian.Dietrich@e...
Nächste SlideShare
Wird geladen in …5
×

Objekt-Relationales Mapping - von Java zu relationalen DBs

1.441 Aufrufe

Veröffentlicht am

Vortrag bei der Austrian Oracle User Group (AOUG) am 28. Februar 2013

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Objekt-Relationales Mapping - von Java zu relationalen DBs

  1. 1. e-movimento Software Design & Beratung GmbH1030 Wien ● Marxergasse 7/26 ► www.e-movimento.comObjekt-Relationales MappingVon Java zu relationalen DBs
  2. 2. Vorstellung Name: DI Sebastian Dietrich Tätigkeiten: Java-Softwareentwickler & Softwarearchitekt Teamleiter & Scrum-Master Berater, Trainer Überzeugungen & Leidenschaften: Technische Qualität & Produktivität Praxiserfahrung & theoretischer Background Agile Softwareentwicklung, Java, Android, Wikipedia Kontakt: mailto://Sebastian.Dietrich@e-movimento.com http://managing-java.blogspot.co.at http://de.wikipedia.org/wiki/Benutzer:Sebastian.Dietrich► www.e-movimento.com, Sebastian Dietrich2
  3. 3. ► www.e-movimento.com, Sebastian Dietrich3Objekt-Relationales MappingWarum überhaupt objektorientiert?http://www.tiobe.com
  4. 4. ► www.e-movimento.com, Sebastian Dietrich4Objekt-Relationales MappingWarum überhaupt relational?http://www.joinvision.com
  5. 5. Objekt-Relationales MappingUnterschiede Objektorientiert – RelationalOO Konzepte Vererbung Polymorphie Kapselung Objektbeziehungen Identität über Adressen Programm. Integrität keine TransaktionalitätRDB Konzepte keine Vererbung keine Polymorphie keine Kapselung Relationen Identität über Schlüssel Referentielle Integrität Transaktionalität► www.e-movimento.com, Sebastian Dietrich5Aber nicht nur die Konzepte unterscheiden sich…
  6. 6. Unterschiede Objektorietiert – RelationalObject-Relational Impedance Mismatch Ein gutes Objektmodell… Ist optimiert für (sich laufend ändernde) fachliche Anforderungen Definiert Fachdaten (Businessobjekte) und deren Logik Verwendet Fachtermini („ubiqutous language“) Wird (meist) für jede Applikation neu & völlig anders definiert Wird laufend refaktorisiert … Ein gutes Datenbankschema… Vermeidet Redundanzen mittels Normalformen Optimiert Leistung Stellt Konsistenz und Integrität der Daten sicher Ist (meist) applikationsübergreifend …Object-RelationalImpedanceMismatch► www.e-movimento.com, Sebastian Dietrich6
  7. 7. Object-Relational Impedance MismatchUnterschiede Struktur: Objekt = Daten + Verhalten, Vererbung Instanz: Objektzustand = Daten + Referenzen an einem Objekt hängt potentiell die gesamte DB Kapselung: Attribute können von außen nur über wohldefinierteZugriffsmethoden verändert werden Identität: Objektidentität von seinen Daten unabhängig  Datenreichen nicht um Identität in OO zu bestimmen Arbeitsweise: OO = Netzwerk interagierender Objekte, Zugriff aufObjekte über Referenzen, keine Transaktionen, keinemengenbasierte Arbeitsweise Verantwortlichkeit: Objektmodell in Verantwortlichkeit derEntwickler einer Applikation, unterliegt ständiger ungeplanterÄnderung Sprachwechsel: SQL vs. Java, Unterschiedliche Typsysteme,unterschiedliche Behandlung komplexer Typen, Wertobjekte► www.e-movimento.com, Sebastian Dietrich7
  8. 8. Object-Relational Impedance MismatchLösung Unterschiedliche Lösungsansätze: Objektorientierte Datenbanken Objektbasierte Datenbanken Relationale Funktionen in Sprachen (Embedded SQL) XML-DBs, Triplestores, … NoSQL (Google BigTable, Amazon Dynamo, CouchDB, ...) Objektrationale Mapper (O/R Mapper) Ideale Lösung?Keine ideale Lösung möglich – nur Umgehungen desProblems. Wartbarkeit vs. Performance30 - 40% der Entwicklungszeit geht in OR-IM[C. Keene 2004]► www.e-movimento.com, Sebastian Dietrich8
  9. 9. Object-Relational Impedance MismatchAbbildung von Vererbung OO  RDB Abbildung von Vererbung = Ein Teilaspekt des ORIM Nicht Trivial  Lösung: Objekt-Relational-Mapper (= OR-Mapper)MitarbeiterInterner Externer<<abstract>>PersonPersonMitarbeiterInternerExterner?► www.e-movimento.com, Sebastian Dietrich9
  10. 10. Abbildung von Vererbung OO  RDBLösungswege „Single Table“, „Table per class-hierarchy“, „Filter-Mapping“ 1 Tabelle für alle Attribute derBasisklasse und davon abgeleitetenKlassen, dazu "Diskriminator" = Typdes Objektes „Joined“, „Table per subclass“,„Vertikales Mapping“ 1 Tabelle für Basisklasse angelegtund für jede davon abgeleiteteUnterklasse, 1:1 Beziehungendazwischen „Table per concrete class“,„Horizontales Mapping“ 1 Tabelle für konkrete Unterklasseninkl. Attribute abstrakter BasisklassenPersonAttribute vonPerson, Mitarbeiter,Externer und Interner+ TypkennzeichenPerson MitarbeiterInterner ExternerMitarbeiterinkl. Attr.von PersonInternerinkl. Attr. vonPerson &MitarbeiterExternerinkl. Attr. vonPerson &Mitarbeiter► www.e-movimento.com, Sebastian Dietrich10
  11. 11. Abbildung von Vererbung OO  RDBWeitere Lösungswege „General" = Generelle Tabellen Eine Tabelle für Klassen Eine für Beziehungen (inkl.Vererbung) Eine für Attribute Eine für Instanzen Eine für Werte► www.e-movimento.com, Sebastian Dietrich11
  12. 12. Abbildung von Vererbung OO  RDBVor- und Nachteile "Single Table" DB Struktur typisch für RDBs einfacher für DBAs- Verbraucht mehr Speicherplatz- Probleme mit "NOT NULL" "Joined" DB Struktur passt zur OOStruktur  einfachereIntegration- Performance (joined Queriesfür Listen unterschiedlicherTypen) "Table per Class"- Performance (mehrere Queriesfür Listen unterschiedlicherTypen)PersonAttribute vonPerson, Mitarbeiter,Externer und Interner+ TypkennzeichenPerson MitarbeiterInterner ExternerMitarbeiterinkl. Attr.von PersonInternerinkl. Attr. vonPerson &MitarbeiterExternerinkl. Attr. vonPerson &Mitarbeiter► www.e-movimento.com, Sebastian Dietrich12
  13. 13. Objekt-Relational Impedance MismatchFaulheitsprinzip Das Rad nicht neu erfinden: Mein Programm ist nicht daserste, das auf eine DB zugreift 30-40% des gesamtenCodierungsaufwandes gehenin ORIM Frameworks Spring JDBC iBATIS JDO, JPA Hibernate, EclipseLink, … Ist eine Datenbank wirklichnötig? Alternativen: RAM (BigMemory) Archive, Bibliotheken, … Konfigurationsdateien Files, XML, SerialisierteObjekte, Preferences, … OODBs, XML-DBs,Semantische DBs Was sind Vorteile von DBs? Schneller? Skalierbarer? Größer?► www.e-movimento.com, Sebastian Dietrich13
  14. 14. JDBCmyBATISDBEasyBeans, TopLink,OpenJPA, EclipseLink,Cayenne, Hibernate,DataNucleusJBoss, WebSphere, OC4J,Geronimo, GlassfishPersistenzlayer und OR Mapper in JavaArchitekturelle PositionierungJDBCPersistenz LayerOR MapperDBJDO / JPA ContainerEJB App ServerSpring-JDBCDbUtils, DBCP► www.e-movimento.com, Sebastian Dietrich14
  15. 15. ► www.e-movimento.com, Sebastian Dietrich15Persistenzlayer und OR Mapper in JavaHibernate Hibernate = OR Mapper von JBoss (RedHat) Persistenzmechanismus von Jboss Application Server Features: Abfragen mittels SQL, HQL, Criteria API, Stored Procedures POJOs ↔ Mapping / Annotations ↔ DB Tabellen Transaktionen, Caches, Lazy Loading, Kaskadierungen, … Weitere Features: EntityManager – Verwendung von Hibernate via JPA Shards – horizontal partitionierte DBs Validator – Daten Integrität & Validierung Tools – Eclipse & Roundtrip Engineering Search – Volltextindices & -suche
  16. 16. ► www.e-movimento.com, Sebastian Dietrich16AppHibernatePersistenzlayer und OR Mapper in JavaHibernate Architektur Transient Objects Aktuell nicht an Session hängendepersistente Objekte (POJOs) Persistent Objects An Session hängende Objekte mitpersistentem Status (POJOs) SessionFactory Factory für Sessions Precompiled Query Cache Session Kommunikation zwischenAnwendung und Datenbank Kapselt JDBC-Verbindung Cache von persistenten Objekten Hat 1..N Transaktionen Transaction ACID Arbeitseinheit JDBC, JTA, … TransaktionenJava JNDI JDBC JTADBTransactionSessionSession FactoryConnectionProviderTransactionFactoryPersistentObjectsTransientObjects
  17. 17. ► www.e-movimento.com, Sebastian Dietrich17Persistenzlayer und OR Mapper in JavaHibernate Beispiel Tabelle KUNDE: Java Klasse (POJO):public class Kunde {private int id;private String name;private String ort;private String strasse;private int plz;// no getter & setter} Hibernate Configdatei für DB-,SQLDialekt-, Caching- … Config Hibernate Mappingdatei:…<class name="Kunde"table="KUNDE"><id name="id" column="ID"><generator class="native"/></id><property name="name" />…</class>… Java Code:session.beginTransaction();List kunden = session.createQuery("from KUNDE").list();session.getTransaction().commit();return kunden;Attribut TypID INTEGER NOT NULLPRIMARY KEYNAME VARCHAR(128)STRASSE VARCHAR(128)ORT VARCHAR(128)PLZ INTEGER
  18. 18. ► www.e-movimento.com, Sebastian Dietrich18Hibernate BeispielMapping von Vererbung mittels Annotations Table per Subclass = „Joined“: Hibernate Annotations:@Entity @Table(name=„PERSON“)@Inheritance(strategy=JOINED)public class Person {@ID @GeneratedValue@Column(name=„PERSON_ID“)private Long personId;…@Entity @Table(name=„MITARBEITER“)@PrimaryKeyJoinColumn(name=„PERSON_ID“)public class Mitarbeiterextends Person {…@Entity @Table(name=„INTERNER“)@PrimaryKeyJoinColumn(name=„PERSON_ID“)public class Internerextends Mitarbeiter {…MitarbeiterInterner Externer<<abstract>>PersonPerson MitarbeiterInterner Externer
  19. 19. ► www.e-movimento.com, Sebastian Dietrich19Vielen Dank für Ihre Aufmerksamkeit!Q&A[Sebastian Dietrich]Sebastian.Dietrich@e-movimento.comhttp://managing-java.blogspot.com

×