21
O/R - Mapper Hibernate ETIS SS04

O/R - Mapper Hibernate

  • Upload
    lonato

  • View
    45

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: O/R - Mapper Hibernate

O/R - Mapper Hibernate

ETIS SS04

Page 2: O/R - Mapper Hibernate

ETIS SS04 Hibernate 2

Gliederung• Motivation

• Architektur

• Persistente Klassen

• Mapping-Files

• Konfiguration und Datenbanken

• Ablauf der Anwendung

• Anfrage

• Zusammenfassung

Page 3: O/R - Mapper Hibernate

ETIS SS04 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

Page 4: O/R - Mapper Hibernate

ETIS SS04 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

Page 5: O/R - Mapper Hibernate

ETIS SS04 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…)

Page 6: O/R - Mapper Hibernate

ETIS SS04 Hibernate 6

Architektur (I)

Transiente Objekte

Persistente Objekte

Anwendung

TransaktionSession

SessionFactory

TransactionFactory ConnectionProvider

JNDI JDBC JTA

Datenbank

Page 7: O/R - Mapper Hibernate

ETIS SS04 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

Page 8: O/R - Mapper Hibernate

ETIS SS04 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

Page 9: O/R - Mapper Hibernate

ETIS SS04 Hibernate 9

Persistente Klassen (I)

public class Serie { private Integer id; private String serie; private Set comic = new HashSet();

public Integer getId() { return id;} //restliche getter-Methoden

public void setId(Integer integer) { id = integer;} //restliche setter-Methoden }

Page 10: O/R - Mapper Hibernate

ETIS SS04 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

Page 11: O/R - Mapper Hibernate

ETIS SS04 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>

Page 12: O/R - Mapper Hibernate

ETIS SS04 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

Page 13: O/R - Mapper Hibernate

ETIS SS04 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>

Page 14: O/R - Mapper Hibernate

ETIS SS04 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

Page 15: O/R - Mapper Hibernate

ETIS SS04 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();

Page 16: O/R - Mapper Hibernate

ETIS SS04 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(); }}

Page 17: O/R - Mapper Hibernate

ETIS SS04 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)

Page 18: O/R - Mapper Hibernate

ETIS SS04 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(); }

Page 19: O/R - Mapper Hibernate

ETIS SS04 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

Page 20: O/R - Mapper Hibernate

ETIS SS04 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)

Page 21: O/R - Mapper Hibernate

ETIS SS04 Hibernate 21

Literatur• http://www.hibernate.org

• http://www.hibernate.org/hib_docs/reference/en/html/

• http://www.gloegl.de/8.html