Object Relational Mapping

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Object Relational Mapping (ORM). Objektmodell - Datenbankmodell.
Objektrelationales Mapping mit JPA
Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.
Klassen - Verkettete Liste -
1 Kapitel 9: Datenbankapplikationen. 2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold.
Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
MySQL.
Datenstrukturen Look-Up Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung.
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Objektrelationales Mapping mit JPA Working with Persistent Objects Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Java: Dynamische Datentypen
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Open Database Connectivity (ODBC). © Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface.
Spezielle Aspekte der Anbindung von Datenbanken im Web.
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
Otto-von-Guericke-Universität Magdeburg Gamal Kassem 1 Tabellenzeile mit READ lesen READ TABLE itab INDEX idx READ TABLE itab WITH KEY comp1 = f1.... Compn.
Datenintegrität Referentielle Integrität create table
Datenbanksysteme für FÜ SS 2000 Seite Worzyk FH Anhalt Transaktionen und Parallelverarbeitung Eigenschaften von Transaktionen Konsistenz Isolation.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
1 Kapitel 12: Transaktionsverwaltung. 2 Transaktion Bündelung mehrerer Datenbankoperationen Mehrbenutzersynchronisation Recovery.
Erhard Künzel für Info 9. Klasse: Digitale Schule Bayern© Erhard Künzel.
Datenbanken 10: Einfügen, Ändern, Löschen
Einführung MySQL mit PHP
3.5.2 Fremdschlüssel/ Referentielle Integrität (6/9)
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
JDBC: JAVA Database Connectivity
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
Datenbankentwicklung IV-LK
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Working With Persistent Objects
Wir bauen uns eine Webapplikation!
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Servlets Servlets und relevantes API Servlets & SQL via JDBC Implementierungs - Spezifika Architektur Überblick Vertikaler Prototyp / Spezifikation.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
JDBC (Java DataBase Connectivity)
Einführung in Datenbankmodellierung und SQL
Esprit Database Suite Eine leistungsfähige Java-Persistzenzschicht zur einfachen Programmierung von Datenbankapplikation.
Normalisierungsprozess
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Torque robert.resch-wolfgang.schneider. uebersicht Was ist Torque Komponenten von Torque Generator Erzeugte Klassen Methoden Torque in Turbine Demobeispiel.
Hibernate (OR-Mapping)
Datenbankanbindung mit
Structured Query Language
7 Verändern von Daten. 9-2 Ziele Beschreibe jeden DML Befehl Einfügen von Zeilen in eine Tabelle Ändern von Zeilen in einer Tabelle Löschen von Zeilen.
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
JDBC1 Motivation(I) JDBC keine Abkürzung, sondern geschützter Name (inoffiziell: für Java Database Connectivity) unterschiedliche DBS haben unterschiedliche.
Datenbank für Skriptenverkauf
PHPmyadmin Maya Kindler 6c.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Effektives Delta Laden DOAG SID Data Warehouse. Ziele Welche CDC Methoden gibt es? Typische Fallen Verschiedene Lösungsansätze praktische Beispiele.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
GUI lokaler Speicher Datenbank
Es ist noch kein Datensatz vorhanden
Die erste Form der INSERT-Anweisung dient der Neueingabe von Daten:
 Präsentation transkript:

Object Relational Mapping (ORM)

Objektmodell - Datenbankmodell

ORM Pro Datenbanktabelle eine Klasse im Objektmodell (Data Transfer Object; DTO) Pro Datensatz in der Tabelle eine Instanz der Klasse Eigene Klassen für die Datenbankzugriffe (Data Access Object; DAO)

ORM cd_id cd_interpret cd_titel 1 Robbie W. Best of 2 Madonna Greatest … …

Schattendaten id (Primärschlüssel) lastUpdate (optimistic locking) storedInDb (bereits als Datensatz vorhanden)

Data Access Object (DAO) Verschiedene Methoden für das Auswählen Speichern Löschen

findByPrimaryKey() SELECT cd_interpret, cd_titel FROM CDS WHERE cd_id = ? ResultSet rs = … if (rs.next()) { CD cd = new CD(); cd.setId(id); cd.setTitel(rs.getString("cd_titel")); cd.setInterpret(rs.getString("cd_interpret")); return cd; } else return null;

findAll() SELECT cd_id, cd_interpret, cd_titel FROM CDS List<CD> liste = new ArrayList<CD>(); ResultSet rs = … while (rs.next()) { CD cd = new CD(); cd.setId(rs.getInt("cd_id")); cd.setTitel(rs.getString("cd_titel")); cd.setInterpret(rs.getString("cd_interpret")); liste.add(cd); } … return liste;

findByTitle() SELECT cd_id, cd_interpret, cd_titel FROM CDS WHERE cd_titel = ? List<CD> liste = new ArrayList<CD>(); ResultSet rs = … while (rs.next()) { CD cd = new CD(); cd.setId(rs.getInt("cd_id")); cd.setTitel(rs.getString("cd_titel")); cd.setInterpret(rs.getString("cd_interpret")); liste.add(cd); } … return liste;

save(CD cd) INSERT INTO CDS (cd_id, cd_interpret, cd_titel) VALUES (?, ?, ?) UPDATE CDS SET cd_interpret = ?, cd_titel = ? WHERE cd_id = ? if (cd.isStoredInDb()) { // UPDATE ... } else // INSERT PreparedStatement pstmt = … if (pstmt.executeUpdate() == 1) { // ok } else // Fehler

remove() PreparedStatement pstmt = … if (pstmt.executeUpdate() == 1) { DELETE FROM CDS WHERE cd_id = ? PreparedStatement pstmt = … if (pstmt.executeUpdate() == 1) { // ok } else // Fehler

Einige wichtige Regeln Parametrierte (?) Statements verwenden Einzelne Spalten mit Namen ansprechen (kein „SELECT * …“) Update-Count überprüfen Datenbankverbindung wiederverwenden ResultSet und PreparedStatement schließen

INSERT und Primary Key cd_id cd_interpret cd_titel 1 Robbie W. Best of 2 Madonna Greatest … … INSERT

INSERT und Primary Key getGeneratedKeys() Sequenzen ResultSet keys = pstmt.getGeneratedKeys(); if (keys.next()) cd.setId(keys.getInt(1)); Sequenzen

DTO Caching Beispiel: dao.findByPrimaryKey(key) liefert eine Referenz auf die CD-Instanz mit dem übergebenen Primärschlüssel. Problem: Bei mehreren Aufrufen mit dem selben key sollte immer die selbe Instanz geliefert werden. Lösung: DAO muss einen Cache von bereits aus Datenbank ausgelesenen Instanzen halten (z.B Map<Key,DTO>)

Inkonsistenzen bei Fehlerfällen Beispiel: Überweisung eines Betrages von einem Bankkonto auf ein anderes. Saldo wird beim ersten Konto um den Betrag reduziert. Bevor der Saldo beim zweiten Konto entsprechend erhöht wird, stürzt das Programm ab.  Inkonsistenz Lösung: Verwenden einer Transaktion

Datenbank-Transaktion In JDBC hängt die Transaktion an der Datenbankverbindung (Connection): con.setAutoCommit(false); con.commit(); con.rollback(); Jedes commit() oder rollback() beginnt zugleich die nächste Transaktion. Savepoints: Savepoint sp = con.setSavepoint(); con.rollback(sp);

Gleichzeitige Zugriffe Problem: 2 Clients bearbeiten den selben Datensatz. Beide Clients holen den Datensatz aus der Datenbank Client 1 ist fertig mit der Bearbeitung und führt ein Update durch. Client 2 ist fertig mit der Bearbeitung und führt ein Update durch. Die Änderungen von Client 1 gehen verloren. Lösung: Datensatz muss beim Auslesen aus der Datenbank gesperrt werden. Datenbank-spezifisch: SELECT ... FOR UPDATE; LOCK TABLE ...

Pessimistic Locking Datensatz wird ausgelesen und gesperrt. Datensatz wird bearbeitet. Update wird durchgeführt. Datensatz wird freigegeben. Nachteil: Datensatz sehr lange gesperrt, wenn Programm abstürzt, etc.

Optimistic locking Datensatz wird ausgelesen aber nicht gesperrt. Datensatz wird bearbeitet. Datensatz wird noch einmal ausgelesen und diesmal gesperrt. Falls Datensatz noch gleich ist wie beim ersten Auslesen  Update und Freigabe Falls Datensatz inzwischen verändert wurde, müssen Änderungen verworfen oder zusammengeführt werden.

Update-Timestamp Jede Tabelle erhält ein zusätzliches Timestamp-Feld (last_upd). Darin wird Zeitpunkt des letzten Updates gespeichert. Datensatz wird ausgelesen Datensatz wird bearbeitet Update: UPDATE … WHERE last_upd = … Wenn zwischendurch kein Update von anderem Client erfolgt ist, ist Update-Count = 1, ansonsten 0.