Hibernate

Quick Start HSQLDB/Hibernate http://www.hsqldb.org/ http://hibernate.org/orm/ HyperSQL • http://sourceforge.net/projects/hsqldb/files/latest/ downlo...
Author: Christa Haupt
5 downloads 2 Views 1MB Size
Quick Start HSQLDB/Hibernate http://www.hsqldb.org/ http://hibernate.org/orm/

HyperSQL • http://sourceforge.net/projects/hsqldb/files/latest/ download?source=files Zip-Datei • hsqldb.jar in classpath legen Oder so .. • Datenbankserver starten: java -classpath ../lib/hsqldb.jar org.hsqldb.Server

HSQLDB • Interaktives SQL-Tool starten mit

java -classpath ../lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

Manuelle Einstellung!

HSQLDB • sspath ../lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

HSQLDB in Eclipse • Data Tools Platform auf Exlipse Marketplace (für Kepler)

HSQLDB in Eclipse

Data Source Explorer

1.

2.

Data Source Explorer: Data source Datenbankname

1.

3. Datenbankverzeichniis

2.

Data Source Explorer: Treiber

.

4.

2. 6. Hsqldb.jar Pfad

Hibernate ORM • http://sourceforge.net/projects/hibernate/files/hib ernate4/4.3.5.Final/hibernate-release4.3.5.Final.zip/download • Alle Jars aus dem Verzeichnis /required ins Projekt nehmen. • Achtung: Hibernat Beispiele im 101repo sind mit älterer Version erstellt (don‘t mix).

Hibernate Beispiel • Was muss man tun, um damit Objekte in einer relationalen DB gespeichert oder aus ihr wiederhergestellt werden Können?

• 1. Die Klassen müssen ein paar Konventionen erfüllen! • 2. Für jede Klasse muss ein Mapping via XML definiert werden. • 3. Eine Hibernate-Konfigurationsdatei muss die Datenbank und die Mapping-Dateien verknüpfen.

Das folgende Beispiel stammt von: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html

Eine einfache Event-Klasse package org.hibernate.tutorial.domain; Wird zum PrimärJedes Objekt muss eine schlüssel in DB eindeutige ID haben import java.util.Date; public class Event { private Long id; Jedes Objekt muss einen private String title; Konstruktor haben private Date date; public Event() {} Getter und Setter mit public Long getId() { return id; } Standardnamen private void setId(Long id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } private ! public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html

Verknüpfung zu Tabelle Grundgerüst für Mapping-Dateien: Klassenname.hbm.xml

[...]

Hier aufzählen



Pro Klasse

Klasse Tabelle

Automatischer Schlüssel

Spezielle Datentypen Datentyp via Reflection



Gesamtkonfiguration org.hsqldb.jdbcDriver jdbc:hsqldb:hsql://localhost sa

Session Factory 1 org.hibernate.dialect.HSQLDialect thread

org.hibernate.cache.NoCacheProvider true update



Speichern eines Objektes Begin /fortsetzung der Session theDate) {

private void createAndStoreEvent(String title, Date Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event theEvent = new Event(); theEvent.setTitle(title); theEvent.setDate(theDate); session.save(theEvent); session.getTransaction().commit(); }

Event-Objekt erzeugen Übergabe an Hibernate

Speichern in DB Ende der Session

[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)

Auslesen aller Objekte aus Tabelle private List listEvents() { Session session = HibernateUtil.getSessionFactory().getCurrentS ession(); session.beginTransaction(); List result = session.createQuery("from Event").list(); session.getTransaction().commit(); return result; } Select * from Event

Beziehungen darstellen package org.hibernate.tutorial.domain; public class Person { private Long id; private int age; private String firstname; private String lastname; public Person() {} // Accessor methods for all properties, private setter for 'id' }



Beziehungen darstellen m:n public class Person {



private Set events = new HashSet();



public Set getEvents() { return events; }



public void setEvents(Set events) { this.events = events; } }

Person

Teilnahme



Event

m:n Datenbankschema Person

Person_Event

Event

Person_ID Age Firstname Lastname

Person_ID Event_ID

Event_ID Event_Date Title

Primärschlüssel

private void addPersonToEvent(Long personId, Long eventId) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Person aPerson = (Person) session.load(Person.class, personId); Event anEvent = (Event) session.load(Event.class, eventId); aPerson.getEvents().add(anEvent); session.getTransaction().commit(); } Änderung am Objekt

Änderungen in DB übertragen (automatic dirty checking)

Daten von Person und Event sidn jetzt als Objekt und DB-Eintrag vorhanden

1:n Datenbankschema Email

Person

Person_Event

Event

Person_ID Email_address

Person_ID Age Firstname Lastname

Person_ID Event_ID

Event_ID Event_Date Title

Primärschlüssel

1:n Beziehung Java public class Person { … private Set emailAddresses = new HashSet(); public Set getEmailAddresses() { return emailAddresses; } public void setEmailAddresses(Set emailAddresses) { this.emailAddresses = emailAddresses; }

1:n Beziehung Hibernate

Suggest Documents