1 / 21

O/R - Mapper Hibernate

O/R - Mapper Hibernate. ETIS SS04. Gliederung. Motivation Architektur Persistente Klassen Mapping-Files Konfiguration und Datenbanken Ablauf der Anwendung Anfrage Zusammenfassung. Motivation (I). Impendance Mismatch : Kluft zwischen RDBMS und Objektorientierte Programmiersprachen

lonato
Download Presentation

O/R - Mapper Hibernate

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. O/R - Mapper Hibernate ETIS SS04

  2. Gliederung • Motivation • Architektur • Persistente Klassen • Mapping-Files • Konfiguration und Datenbanken • Ablauf der Anwendung • Anfrage • Zusammenfassung Hibernate

  3. Motivation (I) • Impendance Mismatch: Kluft zwischen RDBMS und Objektorientierte Programmiersprachen • RDBMS: Relationen, Tupel, Attribute, Fremdschlüsselbeziehungen, … • OO Programmiersprachen: Klassen, Objekten, Eigenschaften, Beziehungen, … • sollen Objekte persistent gemacht werden: • Kluft zwischen beiden Paradigmen tritt hervor, d.h. ca. 35% des Anwendungscodes für Mapping Anwendungsdaten auf Datenspeicher aufgewendet Hibernate

  4. Motivation (II) • Überwinden Impedance Mismatch • kleine Anwendungen: manuelles Mapping mittels JDBC ausreichend • große Anwendungen: ORM sparen Zeit und Arbeitsaufwand • Ziele ORM: • Abbilden von Anwendungsdaten auf DB-Daten • Plain Old Java Objects (POJOs) persistent machen • Anfragen und Suchen von Daten • Abhängigkeiten von herstellerspezifischem SQL-Code beseitigen • evtl. dafür Query Language anbieten Hibernate

  5. Motivation (III) • Hibernate: • populärstes O/R Mapping-Werkzeug für Java Umgebung • open source + große aktive Community • Ziel: • Entwickler 95% der Programmieraufgaben für Datenpersistenz abnehmen • Zeit für manuelles Datenhandling SQL + JDBC reduzieren • transparente Persistenz • Voraussetzungen: • JDK ab 1.2 • SQL DBMS (MySQL, Oracle, DB2, generischer Zugriff…) Hibernate

  6. Architektur (I) Anwendung Transiente Objekte Persistente Objekte SessionFactory Transaktion Session ConnectionProvider TransactionFactory JNDI JDBC JTA Datenbank Hibernate

  7. Architektur (II) • SessionFactory • Cache von kompilierten Abbildungen für einzelne DBs • Factory für Sessions • Session • repräsentiert Konversation zwischen Anwendung und persistentem Speicher • kapselt JDBC-Verbindung • hält Cache von persistenten Objekten, für Navigation auf Objektgraph oder um Objekte anhand ID zu finden Hibernate

  8. Architektur (III) • Persistente Objekte • kurzlebige Objekte, die persistenten Status + Geschäftsfunktionen enthalten (POJOs/JavaBeans) • mit genau einer Session verbunden • Transiente Objekte • Instanzen von persistenten Klassen, die aktuell nicht mit Session verbunden • Transaction • kurzlebiges Objekt, um atomare Arbeitseinheit festzulegen • abstrahiert von JDBC, JTA, Corba-Transaktionen • Session kann mehrere Transaktionen umfassen Hibernate

  9. Persistente Klassen (I) • publicclass Serie { • private Integer id; • private String serie; • private Set comic = new HashSet(); • public Integer getId() { return id;} • //restliche getter-Methoden • publicvoid setId(Integer integer) { id = integer;} • //restliche setter-Methoden • } Hibernate

  10. Persistente Klassen (II) • Hibernate arbeitet am besten mit POJOs (ähnlich JavaBeans) • Hibernate ist nicht eingeschränkt bei Datentypen für Eigenschaften der POJOs, möglich sind also: • alle JDK-Typen inkl. Collections • primitive Datentypen • Hibernate unterstützt transparente Persistenz • keine speziellen Interfaces, Superklassen für Persistentmachung nötig • Reflection und Laufzeitklassen Enhancement (keine Bytecode-Manipulation) • keine Abhängigkeit von Hibernate in der POJO-Klasse Hibernate

  11. Mapping-Files (I) • <?xml version='1.0'?><!DOCTYPE hibernate-mapping ...> • <hibernate-mapping> • <class name=“etis.Serie" table="T_Serie"> • <id name="id" unsaved-value="null"> • <column name="pk_serie"/><generator class="increment"/> • </id> • <property name="sname“/> • <set name="comic" table="T_Comic" lazy="true"> • <key column="fk_serie"/><one-to-many class=“etis.Comic"/> • </set> • </class> • </hibernate-mapping> Hibernate

  12. Mapping-Files (II) • Enthält Metadaten für das O/R-Mapping • Deklaration persistenter Klassen • Abbildung von Eigenschaften auf die von DB-Relationen • persistente Klassen sollten Identifier besitzen • zur Unterscheidung von Objekten • Defaultsettings benutzt, wenn nur Property mit Namen angegeben • Beziehungen (Assoziationen) von Objekten mappen: • one-to-one, one-to-many, • many-to-one, many-to-many Hibernate

  13. Konfiguration und Datenbank (I) <?xml version='1.0'><!DOCTYPE hibernate-configuration ..."> <hibernate-configuration> <session-factory> <property name="connection.url"> jdbc:mysql://short/hibernate </property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username"> <!--user--> </property> <property name="connection.password"> <!--login--> < /property> <property name="dialect"> net.sf.hibernate.dialect.MySQLDialect </property> <property name="hibernate.hbm2ddl.auto"> create </property> <mapping resource=“etis\Comic.hbm.xml"/> <mapping resource=“etis\Serie.hbm.xml"/> </session-factory> </hibernate-configuration> Hibernate

  14. Konfiguration und Datenbank (II) • Properties mit Präfix connection • notwendige Konfiguration zum Aufbau einer JDBC-Verbindung • property dialect • legt den SQL-Dialekt fest • property hibernate.hbm2ddl.auto mit Wert create • automatisches Anlegen des Schemas in die DB, wenn SessionFactory kreiert wird • mapping resource • Pfade zu den Mapping Files der Klassen Hibernate

  15. Ablauf der Anwendung (I) • private SessionFactory sessionFactory; • public Run() { • try { • sessionFactory = new Configuration() • .configure(“/hibernate.cfg.xml“) • .buildSessionFactory(); • } catch (HibernateException e) { • e.printStackTrace(); • } • public static void main(String[] args) { • Run run = new Run(); Hibernate

  16. Ablauf der Anwendung (II) • Session s = factory.openSession(); • Transaction tx = null; • try { • tx = s.beginTransaction(); • Serie serie = new Serie(); • serie.setSName(“Asterix"); • s.save(serie); • tx.commit(); • s.close(); • } catch (HibernateException e) { • e.printStackTrace(); • }} Hibernate

  17. Ablauf der Anwendung (III) • SessionFactory • verantwortlich für eine DB (kann nur ein XML Konfigurationsfile nutzen (hibernate.cfg.xml)) • Eigenschaften der Session Factory vor ihrer Erstellung treffen (Session Factory ist unveränderlich) • Session • repräsentieren Arbeitseinheit mit DB • geöffnet von SessionFactory • jede DB-Operation in Session tritt innerhalb einer Transaktion auf (isoliert DB-Operationen) • Objekte wie in Java üblich erzeugt (persistent mit save) Hibernate

  18. Anfragen (I) • Session s = factory.openSession(); • Transaction tx = null; • try { • tx = s.beginTransaction(); • Query q1 = s.createQuery("from Serie"); • List l = q1.list() • //Ausgabe ... • tx.commit(); • s.close(); • } catch (HibernateException e) { • e.printStackTrace(); • } Hibernate

  19. Anfragen (II) • Hibernate hat verschiedene Anfrage-Methods • Hibernate Query Language (HQL), • Criteria • direkte SQL-Anfragen • am flexiblesten: HQL • leicht zu erlernen • vielseitige oo Erweiterung für SQL • Hibernate nutzt für gesamte SQL-Kommunikation mit DB PreparedStatements und Parameterbindung Hibernate

  20. Zusammenfassung • Mapping von Klassen, Speichern und Suchen von Objekten in Hibernate angeschaut • Hibernate kann viel mehr (http://www.hibernate.org) Roundtrip Development: Unterstützung für Transformation zu und von Quellcode (java), Mappingfiles (hbm) und DB Definition (ddl) Hibernate

  21. Literatur • http://www.hibernate.org • http://www.hibernate.org/hib_docs/reference/en/html/ • http://www.gloegl.de/8.html Hibernate

More Related