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.315 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.315
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1
Aktionen
Geteilt
0
Downloads
1
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • © e-movimento
  • © e-movimento Erklärungen der Indices: The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, Wikipedia and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found under http://www.tiobe.com/index.php/content/paperinfo/tpci/tpci_definition.htm.
  • © e-movimento Erklärungen der Indices: Joinvision.com – Deutsches Onlineportal für die Vermittlung von IT Fachkräften und –Freelancer. Ca. 20.000 Jobangebote pro Jahr. Die Grafik veranschaulicht die historische Entwicklung der relativen Nachfrage nach Programmiersprachen in Jobangeboten bei www.joinvision.com
  • © e-movimento Weitere Infos: OR-Mapper @ Wikipedia: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung
  • © e-movimento Weitere Infos: Object-Relational Impedance Mismatch @ Wikipedia: http://de.wikipedia.org/wiki/Object-relational_impedance_mismatch
  • © e-movimento Weitere Infos: Object-Relational Impedance Mismatch @ Wikipedia: http://de.wikipedia.org/wiki/Object-relational_impedance_mismatch
  • © e-movimento Weitere Infos: OR-Mapper @ Wikipedia: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung
  • © e-movimento
  • © e-movimento
  • © e-movimento
  • © e-movimento Weitere Infos: Java OS-Persistenzframeworks: http://java-source.net/open-source/persistence OR-Mapper @ Wikipedia: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung
  • © e-movimento Weitere Infos: DataNukleus (früher "Java Persistent Objects JPOX) Open Source (Apache License 2) ORM Framework, Implementiert den (alten) Java Data Objects (JDO) Standard und die Java Persistent API (JPA) V1 und demnächst auch 2 Apache Cayenne Open Source (Apache License 2) ORM Framework, Besonderheit ist der CayenneModeller (GUI Tool für DB Reverese Engineering, DB Generierung und Klassengenerierung) und die Möglichkeit über WebServices auf entfernte DBs zuzugreifen EasyBeans Open Source (GNU LGPL License) EJB Container EclipseLink OpenSource (Eclipse Public License) ORM Framework, Referenzimplementierung für JPA 2.0 TopLink Kommerzielles (Oracle) ORM Framework TopLink Essentials OpenSource Edition von TopLink, Referenzimplementierung von EJB 3.0 Hibernate Open Source (GNU LGPL) ORM Framework mit starker kommerzieller Unterstützung (JBoss / RedHat) Apache OpenEJB Open Source (Apache License 2.0) EJB Container – Basis fürJ2EE App Server Geronimo Apache OpenJPA Open Source (Apache License 2.0) JPA Implementierung – basierend auf Kodo (BEA JDO Implementierung)
  • © e-movimento Weitere Infos: Hibernate @ Wikipedia: http://de.wikipedia.org/wiki/Hibernate_(Framework) Hibernate Homepage: https://www.hibernate.org/
  • © e-movimento
  • © e-movimento
  • © e-movimento
  • © e-movimento Weitere Kontaktmöglichkeiten: [email_address] Skype: sebastian_dietrich http://de.wikipedia.org/wiki/Benutzer:Sebastian.Dietrich
  • 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

    ×