eCommerce JDBC Anbindung

Werbung
e-Commerce
Datenbankanbindung mit JDBC
Prof. Dr. Nikolaus Wulff
Persistente Objekte
• Objekte belegen einen bestimmten Speicherplatz
und existieren eine gewisse Zeit lang während der
Programmausführung.
• Definition:
– Persistenz speichert den Status und die Klasse eines
Objektes durch Zeit und Raum.
• Aufgabe eines Datenbanksystems ist es die
Persistenz der Objekte zu gewährleisten, ohne das
sich der Anwendungscode von dem transienter
Objekte unterscheidet.
Prof. Dr. Nikolaus Wulff
e-Commerce
2
Objekte und Klassen
• Objekte
– haben eine eindeutige Identität (OID)
– haben einen Status =  Attribute
– haben ein Verhalten =  Methoden
• Klassen
– eine Klasse ist eine Menge von Objekten mit
• einer gemeinsamen Struktur und
• einem gemeinsamen Verhalten
Prof. Dr. Nikolaus Wulff
e-Commerce
3
Objekte und Klassen (I)
P e rs o n
Klasse:
Objekt:
n a m e : S trin g
vo rn a m e : S trin g
Statische Struktur
w o h n s itz : Ad re s s e
a lte r : in t
Instanzen der Klasse
niko:Person
name
Prof. Dr. Nikolaus Wulff
= Wulff
erwin:Person
name
= Müller
vorname = Nikolaus
vorname = Erwin
wohnsitz= Lübeck
wohnsitz= Hamburg
alter
alter
= 39
e-Commerce
= 45
4
Objekte und Klassen (II)
Überführung des statischen OO-Modells in ein ER-Modell
OO-Modell
ER-Modell
•
•
•
•
•
•
Klasse
Instanz
Attribut
Prof. Dr. Nikolaus Wulff
e-Commerce
Tabelle
Zeile
Feld
5
Objekte und Klassen (III)
• Verwaltung der ObjektID
• Abbildung von Beziehungen
– Abbildung von Vererbungsbeziehungen
• Klassen erben die Attribute der Super-Klasse
• Dynamisches Binden, Zugriff über die Super-Klasse
– Assoziationen und Aggregation
• Assoziation als Fremdschlüssel
• Automatisches Nachladen von aggregierten Klassen
• Objekt/Instanz - Abbildung
– Abbildung der Attribute
• Mapping => Zuordnen der Tabelle und Felder
• Casting => Überführen auf Datentypen des RDBMS
Prof. Dr. Nikolaus Wulff
e-Commerce
6
Objekte und Klassen
Objekt:
niko:Person
name
= Wulff
name
= Müller
vorname = Nikolaus
vorname = Erwin
wohnsitz= Lübeck
wohnsitz= Hamburg
alter
alter
Tabelle:
OID name
Xyz3450 Wulff
uvq4711 Müller
...
Prof. Dr. Nikolaus Wulff
erwin:Person
= 39
= 45
vorname
wohnsitz
alter
Nikolaus
Lübeck, ...
39
Erwin
Hamburg
45
...
...
...
e-Commerce
7
ObjektID und Primärschlüssel
Ist das Konzept des Primärschlüssels identisch zur ObjektID?
ObjektID
• ist eindeutig
• unveränderlich
• strukturlos
Primärschlüssel
• eindeutig pro Tabelle
• kann sich ändern
• je nach Tabelle anders
• Der (fachliche) Primärschlüssel eignet sich nicht als OID.
• Modellierung der OID als getrennte Klasse, mit
• extra Spalte im ER-Modell (Forward-Engineering)
• oder abgeleitet aus Tabelle und Primär-Schlüssel
(Reverse-Engineering)
Prof. Dr. Nikolaus Wulff
e-Commerce
8
Klassendiagramm
P e rso n
F irm a
nam e : S tring
adres s e : A dres s e
b e sch ä ftig t
1
1..*
V e rtra g
pos ition : S tring
gehalt : float
Prof.
Dr.
Nikolaus
Wulff
Prof.
Dr.
Nikolaus
Wulff
e-Commerce
name : S tr ing
vorn ame : S tr ing
woh ns itz : A dres s e
alter : int
ER-Diagram
Tabelle:
Firma
Vertrag
1:N
Person
1:1
• Objekt Modell
• ER- oder Tabellenmodell
• SQL Code
Zeitliche
Entwicklung
im Projekt
CREATE TABLE Person
person-id
ID not null,
vertrag-id
ID not null,
PRIMARY KEY (person-id),
FOREIGN KEY (vertrag-id) REFRENCES Vertrag
Prof.
Dr.
Nikolaus
Wulff
Prof.
Dr.
Nikolaus
Wulff
e-Commerce
OO- und ER-Modell Koppelung
• „SQL-Objekt“
– sehr enge Koppelung
– Objekte beinhalten SQL-Code
• Abstrakte DB-Superklasse
– enge Koppelung
– Jede Klasse kennt seine Tabelle
– OO-Modell stark vom ER-Modell abhängig
• Persistenzmodell
– lose Koppelung => Schichtenarchitektur
– BO-Klassen wissen nichts um ihre Persistenz
Prof. Dr. Nikolaus Wulff
e-Commerce
11
Schichtenarchitektur
OO-Modell
P e rso n
ER-Modell
L o a d e rP e rso n
Person
1 ..*
b e sch ä ftig t
L o a d e rV e r tra g
1
F irm a
Prof. Dr. Nikolaus Wulff
L o a d e rF irm a
e-Commerce
Vertrag
Firma
12
Persistenz - Framework
DB - Klassen
1
< < d a ta b a se > >
DBL o a d e r
0..*
S m a rtPo i n te r
O ID
1
1
O IDP e rso n
O IDF irm a
L o a d e rP e rso n
L o a d e rF irm a
Helper-Klassen
< < p ro x y> >
S P F irm a
F irm a
1
0..1
< < p ro x y> >
S P P e rso n
1..*
P e rso n
1
Prof. Dr. Nikolaus Wulff
1
Business-Klassen
1
1..*
b e sch ä ftig t
0..1
e-Commerce
13
JDBC Kernidee
• Die Java DataBase Connectivity (JDBC) ist eine
Abstraktionsschicht für relationale Datenbanken.
• JDBC definiert einen Satz von Schnittstellen, die
von entsprechenden Datenbankherstellern mit
entsprechenden Treibern implementiert werden.
• Dem Java Entwickler präsentiert sich immer die
selbe SQL konforme Schnittstelle, unabhängig
von der verwendeten Datenbank.
• Somit lassen sich Anwendungen für
verschiedenen Datenbanken wie DB2, Oracle,
mySQL usw. vollkommen transparent
programmieren.
Prof. Dr. Nikolaus Wulff
e-Commerce
14
JDBC Architektur
Abstract Factory
package java.sql
DriverManager
Factory
SQLException
SQLWarning
MetaData
0..*
<<Interface>>
Driver
DriverPropertyInfo
0..*
<<create>>
<<Interface>>
Connection
<<Inter face>>
DatabaseMetaData
<<derived>>
<<create>>
Command
Iterator
<<Interface>>
Statement
<<creat e>>
<<Interface>>
ResultSet
<<derived>>
<<Inter face>>
ResultSetMetaData
<<Interface>>
PreparedStatement
Prof. Dr. Nikolaus Wulff
e-Commerce
15
Relational-Object-Mapping
• JDBC bietet keine echte objektorientierte
Abstraktion zur Persistenz von BusinessObjekten.
• Objekte haben per se keine 1:1 Abbildung auf
relationale Datenbanken:
– das Schreiben muss per Hand codiert werden.
– der ResultSet enthält nur primitive Datentyen und die
Objekte müssen per Hand zusammengesetzt werden
• Diese Problem wird in der Literatur als
Impedanzmissmatch bezeichnet.
Prof. Dr. Nikolaus Wulff
e-Commerce
16
Java SQL Typkonvertierung
• = Konvertierung
empfohlen
x = Konvertierung
möglich
Identifizieren der
Spalte über Namen
oder Position.
Große Daten- oder
Textobjekte werden
über Streams
ausgelesen.
Prof. Dr. Nikolaus Wulff
e-Commerce
17
Einfaches Object Mapping
• Im einfachsten Fall wird jede Klasse auf eine
Tabelle abgebildet.
• Jede Instanz/Objekt der Klasse bildet eine Zeile
der Tabelle.
• Jedes Attribut wird genau auf eine Spalte
abgebildet. Dies setzt voraus, das es sich um einen
primitiven SQL Datentyp handelt. Ansonsten
muss ein Foreign Key verwaltet werden.
• Meist wird für die Objektidentität ein künstlicher
Primary Key vergeben.
Prof. Dr. Nikolaus Wulff
e-Commerce
18
Lesen einer Tabelle
client
driver : Driver
Manager
cont :
Connection
stm : Statement
r s : ResultSet
getConnection(String, String, String)
createStatement( )
executeQuery(String)
next( )
getObject(int)
// read Table
Resu ltSet rs = stm.executeQuery(where);
wh ile(rs.next()) {
for (int col=0; col<colums; col++) {
Ob ject co lum = rs.getObject(i);
.....
} // loop over columns
} // loop over ro ws
Prof. Dr. Nikolaus Wulff
e-Commerce
19
Speichern und Laden
• Der Bookstore ist beinhaltet die Logik zum
Speichern und Laden von Business-Objekten.
• Für einfache Anwendungen ist dies ausreichend,
belastet jedoch bei vielen verschiedenen Objekten
den Webstore mit zu viel JDBC Code und
Detailwissen über die innere Struktur der Klassen.
• Abhilfe: Einführen einer Persistenzabstraktion.
• Einfachste Version: Der Bookstore verwaltet eine
Map mit zu den Business-Objekten passenden
Persistenz-Mappern, an die entsprechende DB
Befehle delegiert werden.
Prof. Dr. Nikolaus Wulff
e-Commerce
Persistenz Framework
• Datenbank Funktionalität in spezielle Mapper
Klassen auslagern.
• Einfachste Version:
– Alle BusinessObjekte erben von einer PersistenzKlasse.
– Alle Mapper erben von einem PersistenzMapper.
– Lediglich einige spezielle Methoden müssen überladen
werden.
• Vorteil:
– Modulare Mapper, einfache Implementierung
• Nachteil:
– Kopplung der BO-Klassen an PersistenzKlasse
Prof. Dr. Nikolaus Wulff
e-Commerce
Java Templates
• Der BookStore verwaltet eine Map mit zu den
Business Objekten passenden Mappern.
• Mit Hilfe von Java Generics läßt sich ein solcher
Persistenz Mechanismus als Template typsicher
implementieren.
• Ein PersistenzMapper wird als abstraktes Generic
definiert, dem nur noch einige spezialisierte
Mapping Funktionen fehlen, die in abgeleiteten
Klassen implementiert werden.
Prof. Dr. Nikolaus Wulff
e-Commerce
BookStore Mapper Verwaltung
• Der BookStore delegiert alle DB Aktionen an generische
Mapper Instanzen vom Typ <T>.
• Als Schlüssel dient die Class<T> Instanz des Objekts T.
BookStore
store(obj : PersistentObject) : void
delete(obj : PersistentObject) : void
type : Class<T>
Map
1
<T extends
PersistentObject>
PersistentMapper
store(obj : T) : void
delete(obj : T) : void
Prof. Dr. Nikolaus Wulff
mapps
e-Commerce
PersistentObject
PersistentMapper Template
<T extends PersistentObject>
<<abstract>>
PersistentMapper
table : St ring
scheme : S tring
type : Clas s<T>
connect ion : java. sql.Connect ion
Persis tent Object
id : long = -1
PersistentMapper(type : Class<T>, t able : S tring, schem e : St ring)
<<abstract>> insert (obj : T) : void
<<abstract>> updat e(obj : T) : void
<<abstract>> mappToInstance(set : Result Set) : T
isNew(obj : T) : boolean
setId(obj : T) : void
store(obj : T) : void
delete(obj : T) : void
execut eQuery(where : String) : Collection<T>
execut eSQL(sql : S tring) : void
PersistentMapper<Book>
Persistent Mapper<User>
getId()
setId()
PersistentMapper<Order>
BookMapper
insert(obj : Book) : void
update(obj : Book ) : void
mappToIns tance() : Book
Book
UserMapper
User
insert(obj : User) : void
update(obj : User) : void
mappToInst ance() : User
OrderMapper
insert(obj : Order) : void
update(obj : Order) : void
mappToInst ance() : Order
Prof. Dr. Nikolaus Wulff
e-Commerce
Order
Adapter als Dekorierer
• Trennung von fachlicher und technischer Schnittstelle.
• Anstatt die Business-Objekte von einer PersistentObject
Superklasse abzuleiten kann das Adapter Muster zur
Entkoppelung verwendet werden.
• Ein Adapter dekoriert die fachlichen BO-Instanzen mit der
technischen Funktionalität des Persistenzframeworks.
• BO-Klassen enthalten selber keinen Hinweis auf
eventuelle Datenbank Aktionen.
• Java EJBs und OR Mapper folgen diesem Ansatz in
unterschiedlicher Ausprägung.
• Die wesentlichen Ideen lassen sich einfach codieren oder
noch besser per Annotations oder XDoclet generieren.
Prof. Dr. Nikolaus Wulff
e-Commerce
Klassen-Adapter als Dekorierer
Book
Fachliche Schnittstelle
Technische Schnittstelle
<<Interface>>
PersistentObject
<T>
PersistentMapper
markDirty()
setId()
getId()
PersistentMapper<Book>
BookMapper
Prof. Dr. Nikolaus Wulff
Persistent Book
e-Commerce
Objekt-Adapter als Dekorierer
<<Interface>>
Book
1
BookImpl
Fachliche Schnittstelle
Technische Schnittstelle
<T>
PersistentMapper
<<Int erface>>
PersistentObject
PersistentMapper<Book>
BookMapper
Prof. Dr. Nikolaus Wulff
PersistentBook
e-Commerce
Anwendung eines Mappers
• Unabhängig von der speziellen Realisierung der
Mapper gestaltet sich eine Anfrage recht einfach:
public Collection<Book> findBooksByTitle(
String title) {
PersistentMapper<Book> mapper;
String where = " WHERE title='" + title + "'";
try {
mapper = getMapper(Book.class);
return mapper.executeQuery(where);
} catch(SQLException e) {
handleError(e);
return null;
}
}
Prof. Dr. Nikolaus Wulff
e-Commerce
Herunterladen