1 hibernate (or-mapping) roland furrer urs frei. 2 inhalt beispielanwendung herkömmlicher...
TRANSCRIPT
![Page 1: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/1.jpg)
1
Hibernate (OR-Mapping)
Roland Furrer
Urs Frei
![Page 2: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/2.jpg)
2
Inhalt
Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate
Idee Bestandteile Beispielanwendung Collection Vererbung Datenbankabfragen
Hibernate mit XDoclets Hibernate mit Annotationen
![Page 3: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/3.jpg)
3
Beispielanwendung
Benutzer Termine*
Person•Kürzel•Vorname•Nachname
Termine•Datum•Uhrzeit•Titel•Beschreibung
*
![Page 4: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/4.jpg)
4
Herkömmlicher Datenbankzugriff
JDBC update insert delete select create
Connectionverwaltung
Es geht auch einfacher!
![Page 5: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/5.jpg)
5
Hibernate Idee
Datenbank
DB Zugriff
Applikation SelectUpdateDeleteInsert Datenbank
Hibernate
Applikation
Zugriff auf DB wird nicht mehr selber programmiert!!
![Page 6: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/6.jpg)
6
Grundelemente
Datenbank
Hibernate
Applikation Anwendung in Java
Open-Source-Produkt unter www.hibernate.org
Open-Source-Produkt HSQLDB unter www.hsqldb.org
![Page 7: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/7.jpg)
7
Bestandteile der Beispielanwendung
DB config File (xml) Definiert die Verbindung zur DB Art der DB
Mapping File (xml) Welches Javaobjekt gehört zu welcher
Tabelle Java Klassen (Java Beans)
![Page 8: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/8.jpg)
8
Beispiel Hibernate Configfile
<hibernate-configuration><session-factory>
<property name="dialect"> org.hibernate.dialect.HSQLDialect </property> <property name="connection.driver_class"> org.hsqldb.jdbcDriver </property> <property name="connection.username"> sa </property> <property name="connection.password"></property> <property name="connection.url"> jdbc:hsqldb:file:db/termine </property>
<mapping resource="net/sf/hibernatesample/einfach/Termin.hbm.xml" /> </session-factory></hibernate-configuration>
![Page 9: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/9.jpg)
9
Beispiel Hibernate Mappingfile
<hibernate-mapping package= "net.sf.hibernatesample.einfach">
<class name="Termin">
<id name="id">
<generator class="native"/>
</id>
<property name="titel"/>
<property name="beschreibung"/>
<property name="zeitPunkt"/>
<property name="ort"/>
</class>
</hibernate-mapping>
![Page 10: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/10.jpg)
10
Beispiel Java-Klassepackage net.sf.hibernatesample.einfach;import java.util.Date;public class Termin { private long id; private String titel; private String beschreibung; private String ort; private Date zeitPunkt;
public String getTitel () { return titel; } public void setTitel (String titel) { this.titel = titel; }
public Date getZeitPunkt () { return zeitPunkt; } public void setZeitPunkt (Date zeitPunkt) { this.zeitPunkt = zeitPunkt; }.....}
![Page 11: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/11.jpg)
11
Tabellen mit Hibernate erzeugen
Erzeugen der Tabelle in der Java-Anwendung:Configuration configuration = new Configuration().configure();
SchemaExport export = new SchemaExport(configuration);
export.create(false, true);
Resultierendes Statement für HSQLDB:create table Termin (
id bigint generated by default as indentity (start with 1),
titel varchar(255),
beschreibung varchar(255)
zeitPunkt timestamp,
ort varchar(255)
primary key (id)
)
![Page 12: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/12.jpg)
12
Erzeugung eines persistenten Objekts
private long erzeugeTermin(String titel, String beschreibung, String ort, Date zeitPunkt) { Termin termin = new Termin(); termin.setTitel(titel); termin.setBeschreibung(beschreibung); termin.setOrt(ort); termin.setZeitPunkt(zeitPunkt); Session session = null; Transaction transaction = null; try { session = sessionFactory.openSession(); transaction = session.beginTransaction(); session.save(termin); transaction.commit(); } catch (HibernateException e) { ... }
....return termin.getID();
}
![Page 13: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/13.jpg)
13
Laden, suchen, aktualisieren, löschen eines persistenten Objekts
Laden:Termin termin = (Termin) session.load(Termin.class, id);
Suchen:Query query = session.createQuery("from Termin where ort=‘ " + ORT + “ ‘ ");List result = query.list();Termin termin = (Termin) result.get(0);
Aktualisieren:Termin termin = (Termin) session.load(Termin.class, id);Transaction transaction = session.beginTransaction();termin.setTitel("neuer Termin");transaction.commit();
Löschen:Termin termin = (Termin) session.load(Termin.class, id);Transaction transaction = session.beginTransaction();session.delete(termin);transaction.commit();
![Page 14: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/14.jpg)
14
Details der Mapping-Dateien
<hibernate-mapping package = "net.sf.hibernatesample.einfach">
<class name="Termin" table="termin">
<id name="id">
<generator class="native"/>
</id>
<property name="titel"/>
<property name="beschreibung"/>
<property name="zeitPunkt" column="zeit" type="timestamp" />
<property name="ort" type="string" length="40" />
</class>
</hibernate-mapping>
![Page 15: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/15.jpg)
15
Objekte als Klassenmember
Wir ändern die Klasse Termin so, dass der Zeitpunkt nicht mehr in einem java.util.Date gespeichert wird, sondern in einem Zeitpunkt.public class Zeitpunkt {
private int minute, stunde, tag , monat, jahr;
.... //mit set- und get-Methoden
}
public class Termin {
private Zeitpunkt zeit;
...//mit set- und get-Methode
}
![Page 16: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/16.jpg)
16
Objekte als KlassenmemberDie Mapping-Datei ändert sich nun wie folgt:<hibernate-mapping package = "net.sf.hibernatesample.einfach"> <class name="Termin" table="termin"> <id name="id"> <generator class="native"/> </id> <property name="titel"/> <property name="beschreibung"/> <component name="zeit">
<property name="minute" /><property name="stunde" /><property name="tag" /><property name="monat" /><property name="jahr" />
</component> <property name="ort" type="string" length="40" /> </class></hibernate-mapping>
![Page 17: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/17.jpg)
17
Umgang mit CollectionsEs soll nun möglich sein, einen Termin nicht an einem definierten Zeitpunkt abzuhalten sondern vorgängig alternative Zeitpunkte zu definieren:public class Termin {
private List<Zeitpunkt> alternativZeiten = new ArrayList<Zeitpunkt>();
...//mit set- und get-Methode
}
In der DB wird eine neue Tabelle ALT_ZEITPKT erzeugt. Die Tabelle hat einen Fremdschlüssel auf die Tabelle TERMIN. Ausserdem braucht die Tabelle eine Spalte LFD_NR, die für alle Elemente in der Liste festlegt, in welcher Reihenfolge sie stehen.
ALT_ZEITPKT
id lfd_nr Minute stunde tag monat jahr
1 2 22 18 1 6 2006
1 0 0 12 1 6 2006
1 1 0 18 7 6 2006
2 0 0 20 7 6 2006
![Page 18: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/18.jpg)
18
Umgang mit CollectionsDie Mapping-Datei sieht dann wie folgt aus:<hibernate-mapping package = "net.sf.hibernatesample.einfach"> <class name="Termin" table="termin"> ... <list name="alternativeZeiten" table="ALT_ZEITPKT">
<key column="id"/><list-index column="lfd_nr"/><composite-element class="hibtest.entity.Zeitpunkt">
<property name="minute" /><property name="stunde" /><property name="tag" /><property name="monat" /><property name="jahr" />
</composite-element> </list> .... </class></hibernate-mapping>
Mit Set, SortedSet, Map, SortedMap, etc. wird jeweils entsprechend verfahren.
![Page 19: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/19.jpg)
19
Vererbung in Hibernate
Ressource
Raum Gegenstand
public abstract class Ressource {
private long id;
private String name;
...// set- und get-Methoden
public class Raum extends Ressource {
private String gebaeude;
...// set- und get-Methode
public class Gegenstand extends Ressource {
private double wert;
...// set- und get-Methode
![Page 20: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/20.jpg)
20
Vererbung in Hibernate
Tabelle je Klassenhierarchie: Die ganze Vererbung in einer einzigen Tabelle!
Ressource
id disc name gebaeude wert
1 r Physikzimmer C1
2 g Beamer 2500.00
<class name=„Ressource"> <id name="id"> <generator class="native"/> </id> <property name="name"/>
<discriminator column=„disc“ type=„string“ lenght=„1“/><subclass name=„Raum“ discriminator-value=„r“>
<property name=„gebaeude“/></subclass><subclass name=„Gegenstand“ discriminator-value=„g“>
<property name=„wert“/></subclass>
</class>
![Page 21: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/21.jpg)
21
Vererbung in Hibernate
Tabelle je konkrete Klasse
<class name=„Ressource"> <id name="id"> <generator class="native"/> </id> <property name="name"/>
<union-subclass name=„Raum“ table=„raum“> <property name=„gebaeude“/>
</union-subclass><union-subclass name=„Gegenstand“>
<property name=„wert“/></union-subclass>
</class>
Raum
id name gebaeude
1 Physikzimmer C1
Gegenstand
Id name wert
2 Beamer 2500.00
![Page 22: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/22.jpg)
22
Vererbung in Hibernate
Tabelle je Klasse
<class name=„Ressource"> <id name="id"> <generator class="native"/> </id> <property name="name"/>
<joined-subclass name=„Raum“ table=„raum“><key column=„id“ />
<property name=„gebaeude“/></joined-subclass><joined-subclass name=„Gegenstand“>
<key column=„id“ /> <property name=„wert“/>
</joined-subclass> </class>
Ressource
id name
1 Physikzimmer
2 Beamer
Raum
id gebaeude
1 C1
Gegenstand
id wert
2 2500.00
![Page 23: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/23.jpg)
23
Datenbankabfragen
HQL sehr ähnlich SQLQuery query = session.createQuery("from Termine");List<Termin> alleTermine = query.list();
CriteriaCriteria crit = session.createCriteria(Termin.class);
crit.add(Restrictions.eq("ort", "Hamburg"));
List<Termin> termine = criteria.list();
SQL auch möglich
![Page 24: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/24.jpg)
24
Hibernate: Ziel erreicht?
Vorteile Keine SQL Statements
Problem Definitionsredundanz Java und XML
Lösungsansätze XDoclet Annotationen
![Page 25: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/25.jpg)
25
Hibernate mit XDoclet
XDoclet: XML Mappingfile generieren Informationen für Generierung aus
Javadoc
![Page 26: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/26.jpg)
26
Hibernate mit XDoclet Bsp. Java/** * @hibernate.class */public class Termin {
private long id;
…/** * @hibernate.property */public String getTitel() {
return titel;}public void setTitel(String titel) {
this.titel = titel; }
/** * hibernate.one-to-one * @hibernate.many-to-one */public Benutzer getInitiator() {
return initiator;}}
![Page 27: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/27.jpg)
27
Hibernate mit XDoclet (3) Vor-Nachteile
Vorteil: Mapping Infos näher bei Sourcen
Einfacheres Ändern Konfiguration an einem Ort
Nachteil: XML Mappingfile immer noch erforderlich Muss z.B. mit Ant generiert werden
![Page 28: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/28.jpg)
28
Hibernate Annotationen
Annotationen Ermöglicht Metainformationen im Code Annotationsprozessoren bei
Kompilierung In Reflection verwenden „Weiterentwicklung“ XDoclet In Java 1.5 enthalten
![Page 29: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/29.jpg)
29
Hibernate Annotationen Bsp.
@Entitypublic class Termin {
private long id;…public String getTitel() {
return titel;}public void setTitel(String titel) {
this.titel = titel; }
@ManyToOne(targetEntity = Benutzer.class)public Benutzer getInitiator() {
return initiator;}}
![Page 30: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/30.jpg)
30
Hibernate Annotationen Vor-Nachteil
Vorteil: Kein XML Mappingfile mehr
Nachteil: Java 1.5 wird benötigt. Nachteil?
![Page 31: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/31.jpg)
31
Warum Hibernate einsetzen?
Bsp. Programmieraufwand für eine Tabelle
Hibernate JDBC
@Entity Create Table
Select
Insert
Delete
1 Codezeile xxx Codezeilen
Es funktioniert Funktioniert es????
![Page 32: 1 Hibernate (OR-Mapping) Roland Furrer Urs Frei. 2 Inhalt Beispielanwendung Herkömmlicher Datenbankzugriff Hibernate Idee Bestandteile Beispielanwendung](https://reader035.vdocuments.site/reader035/viewer/2022070310/55204d7f49795902118d19bb/html5/thumbnails/32.jpg)
32
Referenzen
Hibernate www.dpunkt.de ISBN 3-89864-371-9
www.hibernate.org java.sun.com www.hsqldb.org http://xdoclet.sourceforge.net/xdoclet/
index.html