Hibernate

Transcription

Hibernate
Hibernate
¾
¾
¾
Vortragender
: Nabil Janah
Kursleiter
: Prof. Dr. Björn
j
Dreher
Lehrveranstaltung : Komponenten-Architekturen
Nabil janah
1
Hibernate
Inhalt
„
„
„
„
„
„
„
Hibernate
Hib
t allgemeines
ll
i
Vorteile von Hibernate
Hibernate-Architektur
Persistency-Lifecycle
Konfiguration
. Konfiguration mit Annotations
. Konfiguration mit XML – Mappingdateien
. hibernate.cfg.xml
Ablauf einer Transaktion
Abfragen
. Abfragen
g (1)
( ) – Natives SQL
Q
. Abfragen (2) – HQL
. Abfragen (3) – Criteria API
Nabil janah
2
Hibernate
Hibernate allgemeines
„
„
„
„
Hibernate ist ein Open-Source-Persistenz-Framework für Java
Das Framework ermöglicht es, den Zustand eines Objekts in einer relationalen
Datenbank zu speichern und aus entsprechenden Datensätzen wiederum
Objekte zu erzeugen, ohne die DB-Zugriffe explizit in SQL programmieren zu
müssen.
Diese Funktionalität bezeichnet man auch als Object-Relational Mapping (O-RMapping, kurz ORM), sie befreit den Entwickler von der Programmierung von
SQL-Abfragen und hält die Applikation unabhängig vom SQL-Dialekt der
verwendeten Datenbank.
Datenbank Bei den Objekten handelt es sich um gewöhnliche
Objekte mit Attributen und Methoden (im Java-Bereich POJOs genannt).
Beziehungen zwischen Objekten werden auf entsprechende DatenbankRelationen abgebildet.
Die Abfrage der persistierten Objekte erfolgt über die SQL-ähnliche
Abfragesprache Hibernate Query Language (HQL), ausprogrammiert mittels
j
Criteria-API oder direkt per SQL.
der objektorientierten
Nabil janah
3
Hibernate
Vorteile von Hibernate
„
„
„
„
„
„
Es ist das Open-Source Persistenz-Framework der Wahl mit enormer Verbreitung, sehr
aktiver Entwicklung und grosser Community .
D t b k U bhä i k it (es
Datenbank-Unabhängigkeit
( werden
d zahlreiche
hl i h DBMS und
d deren
d
SQLDialekte
SQLDi l kt
unterstützt) .
Nicht intrusiv (keine Ableitung eigener Klassen von Hibernate-Klassen erforderlich) .
Lässt dem Entwickler g
grösstmögliche
g
Freiheit bei der Anwendungserstellung
g
g und ist
äusserst flexibel einsetzbar.
Unterstützung durch Zusatzpakete (z.B.Annotations, EntityManager) und zahlreiche
Tools (z.B. für ANT und Eclipse) .
Sehr gute Literatur verfügbar .
Nabil janah
4
Hibernate
Hibernate-Architektur
Hibernate-Mapping :
„
Die Grundidee von O/R-Mapping ist,
objektorientierte Klassen und ihre
Eigenschaften auf Tabellen und Spalten
einer relationalen Datenbank abzubilden.
Vereinfacht gesagt
gesagt, stellt ein O/R-Mapper
einen Datensatz aus der Datenbank durch
ein entsprechendes Objekt dar. Indem wir
Änderungen
g am Objekt
j
vornehmen,
manipulieren wir letztlich den entsprechenden Inhalt einer Datenzeile.
Nabil janah
5
Hibernate
Hibernate-Architektur
Persistente Klassen (POJOs/JavaBeans) :
„
„
Die persistenten
Di
i t t Kl
Klassen spielen
i l bei
b i
einem O/R-Mapper eine zentrale Rolle,
obwohl sie vom Aufbau sehr einfach sind.
Sie enthalten oftmals nur eine Sammlung
von Eigenschaften und entsprechenden
Getter- und Setter-Methoden.
Diese Klassen enthalten die Daten,
die in der Datenbank gespeichert werden
soll und stellen somit unser Domain-Modell dar.
Nabil janah
6
Hibernate
Hibernate-Architektur
Die Hibernate-Session:
„
Die Hibernate-Session ist für den
Entwickler die primäre Schnittstelle (Primary
API) zu Hibernate. Mithilfe der Session
können Objekte aus der Datenbank gelesen
bzw. Änderungen an Objekten persistiert
werden.
Nabil janah
7
Hibernate
Hibernate-Architektur
Die Hibernate-Session:
Hibernate Session:
„
„
Die folgende Tabelle zeigt einige Operationen, die über eine Session ausgelöst werden
können:
Neben der Funktion als Bindeglied zwischen der Datenbank und unserer Anwendung
stellt die Session auch eine Factory für Transaction-Instanzen bereit.
Gleichzeitig ist eine konkrete Session-Instanz nicht thread-safe und darf nur von
einem Thread verwendet werden.
Nabil janah
8
Hibernate
Hibernate-Architektur
Hibernate-Session-Factory:
„
Die SessionFactory
Di
S i F t
lädt und
d hält alle
ll
O/R-Mappings. Sie ist der Erzeuger der
bereits erwähnten Session-Klasse.
Im Gegensatz zur Session enthält unsere
Anwendung genau eine SessionFactory,
die als thread-safe und unveränderlich
angesehen werden kann.Das bedeutet
, dass die SessionFactory beim Start
der Anwendung einmalig instanziiert und konfiguriert wird. Die dafür notwendige
Konfiguration sollte im Klassenpfad als Property-Datei als XML-Datei (z. B.
hibernate.cfg.xml) vorliegen. Innerhalb dieser Datei werden die Datenbank
Datenbank-Verbindung
Verbindung
sowie verschiedene weitere Einstellungen konfiguriert, was wir uns in der Folge noch
genauer ansehen werden.
Nabil janah
9
Hibernate
Persistency-Lifecycle
Die Objekte, die der Hibernate-Session
noch nicht bekannt sind, z. B. weil sie
gerade mit dem new-Operator
erzeugt worden sind,
werden als transiente Objekte
bezeichnet.
„
Nabil janah
10
Hibernate
Persistency-Lifecycle
Die Objekte, die Hibernate in
der aktuellen Session bekannt sind,
werden als persistente Objekte
b
bezeichnet.
i h t Sie
Si haben
h b eine
i
Repräsentation in der Datenbank
Und einen Wert für ihren
Primärschlüssel
„
Nabil janah
11
Hibernate
Persistency-Lifecycle
„
Ein persistentes Objekt kann von der
Hibernate-Session wieder getrennt
werden.In
d I diesemFall
di
F ll sprichtman
i ht
von einem detached Objekt.
Nabil janah
12
Hibernate
Konfiguration mit Annotations
@Entity
public class Item {
@Id @Gene
@GeneratedValue(strategy=GenerationType.AUTO)
atedVal e(st ateg Gene ationT pe AUTO)
protected long SKU;
@Column(name=“description”)
protected
t t d St
String
i d
description;
i ti
@Column(name=“name”)
protected String name;
@Column(name=“category”)
l
(
“
”)
protected String category;
public Item() {}
// Getter und Setter
...
}
Nabil janah
13
Hibernate
XML – Mappingdateien (1)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<class name =" Item" >
<id name =“SKU" type
yp =" long">
g
<column name =“SKU" />
<generator class =" auto" />
</id
/ >
<property name =“description " type =" string “>
<column name =" description " length =“100" />
</ property >
...
Nabil janah
14
Hibernate
und mit XML – Mappingdateien (2)
<property name =“ name" type =" string “>
<column name =“name " length ="30" />
</ property >
<property
p p y name =“category"
g y type
yp =" string„>
g
<column name =“category " />
</ property >
<version name=“version“ access=“field“ column=“version“/>
/
</ class >
</ hibernate-mapping >
Nabil janah
15
Hibernate
hibernate.cfg.xml (1)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
p //
g
/
g
<hibernate-configuration>
<session-factory>
</session-factory>
/
y
</hibernate-configuration>
Nabil janah
16
Hibernate
hibernate.cfg.xml (2)
<property name="connection.driver_class“>drivername</prope
<property
name="connection.url“>jdbc:hsqldb:hsql://localhost:5432/test</property>
<property name="connection.username“>username</property>
<property name="connection.password“>passwort</property>
<property name="dialect“> SQLDialectname </property>
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<mapping class ="classenname"/>
Nabil janah
17
Hibernate
Ablauf einer Transaktion
AnnotationConfiguration configuration =
new AnnotationConfiguration();
SessionFactory sessionFactory =
configuration.configure().buildSessionFactory();
f
f
() b ld
()
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
try {
//Aktionen mit der Session durchführen
Transaction.commit();
session.close();
} catch (Throwable t) {
Transaction.rollback();
Throw t;
}fi ll {
}finally{
Sesssion.close();
}
Nabil janah
18
Hibernate
Abfragen (1) – Natives SQL
„
„
„
- Unterstützung der SQL – Syntax
- Funktioniert ähnlich wie Abfragen mit JDBC
Beispiel:
p
List l = session.createSQLQuery(
“select * from item where item.name = ‘HardDrive120‘ ).list();
Nabil janah
19
Hibernate
Abfragen (2) - HQL
„
„
„
„
- Hibernate Query Language ist ein objektorientiertes SQL
- Beinhaltet fast alle Möglichkeiten, die auch SQL bietet
Beispiel:
List l = session.createQuery(
Q y( ”from Item i where i.name=
‘HardDrive120’).list();
Nabil janah
20
Hibernate
Abfragen (3) – Criteria API
- API zur Programmatischen Erzeugung von Abfragen
„
- Deutlich komfortabler als Manipulation von Stringqueries
„
- Funktionsumfang entspricht HQL
„
Beispiel:
List<Item> workers= ((List<Item>)) session.
createCriteria(Item.class) .
add( Restrictions.or(
Restrictions.and((
Restrictions.like("lastName", "Kin%"), Restrictions.eq("firstName", "Garvin")),
Restrictions.gt("salary", 2000F)) ) .list();
„
Nabil janah
21
Hibernate
Referenzen
„
„
„
„
Hibernate www.dpunkt.de ISBN 389864-371-9
www hibernate org
www.hibernate.org
java.sun.com
www.wikipedia.de
Nabil janah
22
Hibernate
Hibernate
Nabil janah
23
Hibernate