ibatis SQL Maps Einführung



Ähnliche Dokumente
Oracle: Abstrakte Datentypen:

Unsere Webapplikation erweitern

Objektorientierte Programmierung

Enigmail Konfiguration

Umzug der Datenbank Firebird auf MS SQL Server

Datenbanken Kapitel 2

Visual Basic Express erstes Projekt anlegen

Auto-Provisionierung tiptel 31x0 mit Yeastar MyPBX

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Abwesenheitsnotiz im Exchange Server 2010

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

Datenmanagement in Android-Apps. 16. Mai 2013

Erfahrungen mit Hartz IV- Empfängern

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Einführung in die Programmierung

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

<script type="text/javascript"> <! <%= page(page.searchsuggestionsscript) %> // > </script>

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Installationsanleitung dateiagent Pro

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Whitepaper. Produkt: combit address manager/combit Relationship Manager. Erweitertes David AddIn für Tobit. combit GmbH Untere Laube Konstanz

Anleitung über den Umgang mit Schildern

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

MARCANT - File Delivery System

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Wie Sie mit Mastern arbeiten

Installation OMNIKEY 3121 USB

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Gezielt über Folien hinweg springen

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

WPF Steuerelemente Listbox, ComboBox, ListView,

Erstellen eigener HTML Seiten auf ewon

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube Konstanz

1) Farbsteuergerät in der Nikobus-Software unter Modul zufügen hinzufügen.

Kundenspezifische Preise im Shop WyRu Online-Shop

E-Finance Java de PF

SMS-Tool. Seite 1 von 8

Kurzeinführung Excel2App. Version 1.0.0

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Architektur des agimatec-validation Frameworks

Windows Server 2012 RC2 konfigurieren

WinVetpro im Betriebsmodus Laptop

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Stammdatenanlage über den Einrichtungsassistenten

Guideline. Facebook Posting. mit advertzoom Version 2.3

Rundung und Casting von Zahlen

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Anleitung zur Verwendung der VVW-Word-Vorlagen

Text Formatierung in Excel

Dokumentenverwaltung im Internet

Erstellen von x-y-diagrammen in OpenOffice.calc

Whitepaper. Produkt: combit Relationship Manager. combit Relationship Manager und Terminalserver. combit GmbH Untere Laube Konstanz

2015 conject all rights reserved

Nach der Installation des FolderShare-Satellits wird Ihr persönliches FolderShare -Konto erstellt.

Erstellung von Reports mit Anwender-Dokumentation und System-Dokumentation in der ArtemiS SUITE (ab Version 5.0)

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Screening for Illustrator. Benutzerhandbuch

TIF2ELO Maskeneditor Handbuch

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Hinweise zur Installation von MySQL

PayPal PLUS für Shopware

Zusammenführen mehrerer Dokumente zu einem PDF In drei Abschnitten erstellen Sie ein Dokument aus mehreren Einzeldokumenten:

ID VisitControl. Dokumentation Administration Equitania Software GmbH cmc Gruppe Seite 1

Überprüfung der digital signierten E-Rechnung

Information zum SQL Server: Installieren und deinstallieren. (Stand: September 2012)

Einstellen der Makrosicherheit in Microsoft Word

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

SharePoint-Migration.docx

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Konfiguration der tiptel Yeastar MyPBX IP-Telefonanlagen mit Peoplefone Business SIP Trunk

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Installation der Demoversion vom M-Doc AutoSigner

Zwischenablage (Bilder, Texte,...)

Installationsleitfaden kabelsafe backup professional unter MS Windows

Artikel Schnittstelle über CSV

Um in das Administrationsmenü zu gelangen ruft Ihr Eure Seite auf mit dem Zusatz?mod=admin :

Auf der linken Seite wählen Sie nun den Punkt Personen bearbeiten.

Anwendertreffen 20./21. Juni

BEDIENUNGSANLEITUNG: EINREICH-TOOL

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Programme im Griff Was bringt Ihnen dieses Kapitel?

Pixtacy-Anbindung an CleverReach.de

Stepperfocuser 2.0 mit Bootloader

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Transkript:

ibatis SQL Maps Einführung für SQL Maps Version 2.0 Oktober 27, 2007 Übersetzung Axel Leucht (Axel.Leucht@gmx.net)

Einführung Dieses Handbuch gibt ihnen eine Einführung des typischen Einsatzes von SQL Maps. Details von SQL Maps können sie im Handbuch lesen und hier beziehen: http://ibatis.ibatis.apache.org.org Vorbereitung zur Nutzung von SQL Maps Das SQL Maps Framework ist sehr tolerant gegenüber schlechter Datenbankmodellierung und/oder einem schlechten Objektmodell. Trotzdem empfehlen wir ihnen Standardpraktiken beim Entwurf der Datenbank (Normalisierung) oder des Objektmodells anzuwenden. Dadurch erhalten sie eine gute Performance und ein makelloses Design. Am einfachsten starten sie, indem sie sich fragen womit sie arbeiten. Was sind ihre Business Objekte? Welche Datenbanktabellen benötigen sie? Welche Beziehungen existieren zwischen ihnen? Im ersten Beispiel nehmen wir folgende einfache Person-Klasse an, die dem typischen JavaBean-Muster genügt. Person.java package examples.domain; //korrekte imports angenommen. public class Person { private int id; private String firstname; private String lastname; private Date birthdate; private double weightinkilograms; private double heightinmeters; public int getid () { return id; public void setid (int id) { this.id = id; //hier die üblichen getters und setters um Platz zu sparen Wie wird diese Person-Klasse auf ihre Datenbank abgebildet? SQL Maps schränkt sie nicht bei Beziehungen von Objekten zur Datenbank ein, sondern sie können Beziehungen verwenden um zum Beispiel eine Tabelle pro Klasse, mehrfache Tabellen pro Klasse oder mehrfache Klassen pro Tabelle. Da sie die volle Kontrolle über das verwendete SQL haben, gibt es praktisch keine Einschränkungen. Nehmen wir für dieses Beispiel eine einfache Tabelle-pro-Klasse Beziehung an: Person.sql CREATE TABLE PERSON( PER_ID NUMBER (5, 0) NOT NULL, PER_FIRST_NAME VARCHAR (40) NOT NULL, PER_LAST_NAME VARCHAR (40) NOT NULL, PER_BIRTH_DATE DATETIME, PER_WEIGHT_KG NUMBER (4, 2) NOT NULL, PER_HEIGHT_M NUMBER (4, 2) NOT NULL, PRIMARY KEY (PER_ID) ) 2

Die SQL Map Konfigurationsdatei Nachdem wir wissen mit welchen Klassen und Tabellen wir arbeiten ist der nächste Schritt die SQL Map Konfigurationsdatei. Diese Datei beschreibt die zentrale Konfiguration der SQL Map Implementierung. Bei der Konfigurationsdatei handelt es sich um eine XML Datei. In ihr werden Properties, JDBC DataSources und SQL Maps konfiguriert. Dieses gibt ihnen einen Ort um zentral ihre DataSource aus einer Reihe von möglichen Implementierungen zu definieren, unter anderem ibatis SimpleDataSource, Jakarta DBCP (Commons), oder DataSource aus einem JNDI Kontext (z.b. aus einem Appserver). Diese Möglichkeiten sind detaillierter im Handbuch beschrieben. Die Struktur ist simpel und für obiges Beispiel könnte sie wie folgt aussehen: Beispiel fortgesetzt auf nächster Seite 3

SqlMapConfigExample.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmapconfig PUBLIC "-//ibatis.apache.org//dtd SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <!-- Nehmen sie IMMER den korrekten XML header wie oben angegeben! --> <sqlmapconfig> <!-- Die properties-datei stellt diverse Name/Wert-Paare (name=value) bereit, die in dieser Konfigurationsdatei einfach mit Platzhaltern der Form ${driver referenziert werden können. Die properties-datei ist üblicherweise im Klassenpfad angegeben. Eine properties-datei Angabe ist optional. --> <properties resource="examples/sqlmap/maps/sqlmapconfigexample.properties" /> <!-- Die folgende Einstellungen spezifizieren Details der SqlMap Konfiguration wie zum Beispiel das Transaktion Management. Sie sind alle optional (Details im Handbuch). --> <settings cachemodelsenabled="true" enhancementenabled="true" lazyloadingenabled="true" maxrequests="32" maxsessions="10" maxtransactions="5" usestatementnamespaces="false" /> <!-- Type aliases erlauben ihnen, einen kurzen Namen statt eines langen voll qualifizierten Klassennamen zu definieren. --> <typealias alias="order" type="testdomain.order"/> <!-- Spezifizieren sie eine DataSource für diese SQL Map. Hier nehmen wir eine einfache SimpleDataSource. Beachten sie die Verwendung der properties aus oben angegebener properties-datei. --> <transactionmanager type="jdbc" > <datasource type="simple"> <property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> <property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/> </datasource> </transactionmanager> <!-- Geben sie alle SQL Map XML Dateien an, die in dieser SQL Map geladen werden sollen. Beachten sie das alle Dateien im Classpath liegen. Zur Zeit haben wir nur eine Datei --> <sqlmap resource="examples/sqlmap/maps/person.xml" /> </sqlmapconfig> 4

SqlMapConfigExample.properties # Dies ist eine einfache properties-datei, um zum Beispiel umgebungsspezifische Werte in einer externen Datei zu halten. # Somit kann durch Tausch einer einzigen Datei zum Beispiel auf verschiedene Datenbanken # (Test,Deployment,Produktion,...) zugegriffen werden # Benutzung einer properties Datei ist komplett optional. driver=oracle.jdbc.driver.oracledriver url=jdbc:oracle:thin:@localhost:1521:oracle1 username=jsmith password=test SQL Map Datei(en) Nun haben wir eine DataSource eingerichtet. Wir benötigen zusätzlich eine SQL Map Datei, in der wir unsere SQL-Befehle, die Abbildung von Input-Parametern und Ausgabe-Parametern der SQL-Befehle vornehmen. Fahren wir mit dem Beispiel fort und erstellen eine SQL Map Datei für die Person Klasse und der PERSON Tabelle. Wir starten mit dem generellen Aufbau der Datei und einem einfachen select Anweisung: Person.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.apache.org//dtd SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlmap namespace="person"> <select id="getperson" resultclass="examples.domain.person"> SELECT PER_ID as id, PER_FIRST_NAME as firstname, PER_LAST_NAME as lastname, PER_BIRTH_DATE as birthdate, PER_WEIGHT_KG as weightinkilograms, PER_HEIGHT_M as heightinmeters FROM PERSON WHERE PER_ID = #value# </select> </sqlmap> Obiges Beispiel zeigt die einfachste Form einer SQL Map Datei. Es verwendet ein Feature des SQL Maps Frameworks das automatisch Spalten aus dem ResultSet auf JavaBean Properties (oder Map keys etc.) abbildet. Die #value# Angabe ist ein Input Parameter. Präzise geben wir an, das es sich bei value um einen einfachen Wrapper für Java-Primitive (z.b. Integer) handelt. Es gibt noch andere Einschränkungen für dieses automatische Result Mapping. Es gibt zum Beispiel keine Möglichkeit den Typen der Spalten anzugeben oder komplexe Objektgraphen zu laden. Außerdem bringt dieses Verfahren einen kleinen Performance-Nachteil beim Zugriff auf die ResultSetMetaData mit sich. Durch die Angabe einer Result Map können alle diese Einschränkungen umgangen werden.. Da aber Einfachheit unser Ziel ist, können wir dies zu einem späteren Zeitpunkt nachholen ohne eine Zeile Java Code zu ändern. 5

Die meisten Datenbank Applikationen lesen nicht nur einfach aus der Datenbank, sondern modifizieren auch die Daten. Wir haben ein Beispiel gesehen, wie ein einfaches SELECT gemapped wird, aber wie geschieht dies mit INSERT, UPDATE and DELETE? Gute Nachricht: Kein Unterschied! Unten geben wir ein vollständigeres Mapping mit mehr SQL Befehlen an, die neben Daten selektieren diese auch einfügen und ändern können. Person.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.apache.org//dtd SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlmap namespace="person"> <!-- Verwende einen primitiven Wrapper Type (z.b.. Integer) als Parameter und verwende automapping vom Resultat-Spalten auf das Person Objekt (JavaBean) Properties --> <select id="getperson" parameterclass= int resultclass="examples.domain.person"> SELECT PER_ID as id, PER_FIRST_NAME as firstname, PER_LAST_NAME as lastname, PER_BIRTH_DATE as birthdate, PER_WEIGHT_KG as weightinkilograms, PER_HEIGHT_M as heightinmeters FROM PERSON WHERE PER_ID = #value# </select> <!--Verwende Person Objekt (JavaBean) Properties als Parameter für dassql-iinsert. Jeder der Parameters der Form #hash# Symbole ist eine JavaBean property der Person Klasse --> <insert id="insertperson" parameterclass="examples.domain.person"> INSERT INTO PERSON (PER_ID, PER_FIRST_NAME, PER_LAST_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M) VALUES (#id#, #firstname#, #lastname#, #birthdate#, #weightinkilograms#, #heightinmeters#) </insert> <!-- Verwende Person Objekt (JavaBean) Properties als Parameter für den SQL-update. Jeder der Parameters der Form #hash# Symbole ist eine JavaBean property der Person Klasse. --> <update id="updateperson" parameterclass="examples.domain.person"> UPDATE PERSON SET PER_FIRST_NAME = #firstname#, PER_LAST_NAME = #lastname#, PER_BIRTH_DATE = #birthdate#, PER_WEIGHT_KG = #weightinkilograms#, PER_HEIGHT_M = #heightinmeters# WHERE PER_ID = #id# </update> Verwende Person Objekt (JavaBean) Properties als Parameter für den SQL-delete. Jeder der Parameters der Form #hash# Symbole ist eine JavaBean property der Person Klasse. --> <delete id="deleteperson" parameterclass="examples.domain.person"> DELETE PERSON WHERE PER_ID = #id# </delete> </sqlmap> 6

Entwickeln mit dem SQL Map Framework Wir haben nun alles konfiguriert und können uns der Java Applikation widmen. Zuallererst muss SQL Map initialisiert werden. Dieses besteht einfach darin, die SQL Map Konfigurationsdatei, die wir zuvor erstellt haben, zu laden. Dieses können wir einfach mit der Resources Klassen aus dem Framework bewerkstelligen. String resource = com/ibatis/example/sqlmap-config.xml ; Reader reader = Resources.getResourceAsReader (resource); SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader); Dieses SqlMapClient Objekt ist langlebig und thread safe. Für einen Applikationslauf muss dieses Objekt nur einmal instantiiert werden. Dieses kann geeignet in einem static Member einer Basisklasse (z.b. Basis- DAO Klasse) geschehen. Wenn sie einen anderen Weg bevorzugen kann es zum Beispiel auch in einer Helper-Klasse geschehen: public MyAppSqlConfig { private static final SqlMapClient sqlmap; static { try { String resource = com/ibatis/example/sqlmap-config.xml ; Reader reader = Resources.getResourceAsReader (resource); sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader); catch (Exception e) { // Wenn sie zu dieser Stellen kommen, ist ein Fehler aufgetreten und es eigentlich // nicht wichtig um welchen Fehler es sich handelte. Auf jeden Fall ist die Situation nicht // behebbar und wir sollten die Applikation hochgehen lassen, so das wir vom Problem // wissen. Sie sollten mindestens solche Fehler loggen und erneut die Exception werfen // damit sie Kenntnis über das Problem bekommen. e.printstacktrace(); throw new RuntimeException ( Error initializing MyAppSqlConfig class. Cause: + e); public static SqlMapClient getsqlmapinstance () { return sqlmap; Lesen von Objekten aus der Datenbank Nun,da die SqlMap Instanz initialisiert ist, können wir sie verwenden. Lesen wir als Erstes ein Person Objekt aus der Datenbank. (Nehmen wir an, das es bereits 10 PERSON Datensätze mit PER_ID von 1 bis 10 gibt). Um ein Person Objekt aus der Datenbank zu lesen, benötigen wir nur die SqlMap Instanz, der Namen des gemappten Statements und eine Person ID. Laden wir Person #5. SqlMapClient sqlmap = MyAppSqlMapConfig.getSqlMapInstance(); // siehe oben Integer personpk = new Integer(5); Person person = (Person) sqlmap.queryforobject ( getperson, personpk); 7

Schreiben von Objekten in die Datenbank Nun haben wir ein Person Objekt aus der Datenbank. Ändern wir einige Daten, zum Beispiel Größe und Gewicht der Person. person.setheightinmeters(1.83); // person wie zuvor gelesen person.setweightinkilograms(86.36); sqlmap.update( updateperson, person); Wenn sie die Person löschen möchten, ist dies genauso einfach. sqlmap.delete ( deleteperson, person); Einfügen einer neues Person ist ähnlich. Person newperson = new Person(); newperson.setid(11); // normalerweise würden sie die ID aus einer Sequenz oder einen eigenen Tabelle holen newperson.setfirstname( Clinton ); newperson.setlastname( Begin ); newperson.setbirthdate (null); newperson.setheightinmeters(1.83); newperson.setweightinkilograms(86.36); sqlmap.insert ( insertperson, newperson); Mehr gibt es nicht zu wissen! Nächste Schritte Dies ist das Ende dieser kurzen Einführung Schauen Sie bitte bei http://ibatis.apache.org nach dem komplette SQL Maps 2.0 Handbuch, und dem JPetStore 4, einer kompletten auf Struts, ibatis DAO 2.0 und SQL Maps 2.0 basierenden Webapplikation. 8

CLINTON BEGIN MAKES NO WARRANTIES, EXPRESS OR IMPLIED, AS TO THE INFORMATION IN THIS DOCUMENT. 2004 Clinton Begin. All rights reserved. ibatis and ibatis logos are trademarks of Clinton Begin. The names of actual companies and products mentioned herein may be the trademarks of their respective owners. 9