Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk



Ähnliche Dokumente
Gregor Raschke 2008 HIBERNATE. Eine Einführung

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Übungsaufgabe Transaktion als Middleware

Enterprise JavaBeans Überblick

Softwareentwicklung mit Enterprise JAVA Beans

Java Persistence API. Phillip Ghadir Oliver Tigges

Datenbankpraktikum, Gruppe F. JPA mit Hibernate. Alexander Stautner, Harald Zauner, Sascha Schreier

Java-Persistenz-Architekturen. Freiberuflicher Entwickler und Autor. DOAG Konferenz 1.12.

Java Database Connectivity (JDBC) zum Zugriff aus in z.b. in Java geschriebenen Applikationen

Hibernate. Vortragender : Nabil Janah Kursleiter : Prof. Dr. Björn Dreher Lehrveranstaltung : Komponenten-Architekturen. Nabil janah 1 Hibernate

Java Persistence API 2.x. crud + relationships + jp-ql

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Nathan Burgener. Design by Contract. Modul SWE

Probleme bei der Nutzung der Bean Validation in JPA

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Große Übung Praktische Informatik 1

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 39

WebPoint. Ein Framework zur Erstellung von webbasierten Verkaufsanwendungen. Maria C. Raabe Daniel Woithe Vorlage: Torsten Walter. 16.

Hibernate Das Praxisbuch für Entwickler

Objektorientierte Programmierung

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

Software Entwicklung II (SS12)

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Javakurs zu Informatik I. Henning Heitkötter

Der lokale und verteilte Fall

Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Assoziation und Aggregation

Einführung in Javadoc

Einführung in die Programmierung

WebService in Java SE und EE

IBM Software Demos Rational Software Delivery Platform - Änderungen an Design und Architektur einer Anwendung

Objektorientierter Systementwurf mit Java

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

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

OR-Mapping. WS2008/2009 DBIS/Dr. Karsten Tolle

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Algorithmen und Datenstrukturen

Software Engineering II

Typumwandlungen bei Referenztypen

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Übungen zu Softwaretechnik

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

Objektorientierte Programmierung

»Java-Persistenz mit Hibernate«Technology Days Workshop

Objektorientierte Datenbanken

Factory Method (Virtual Constructor)

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

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

Einführung in die Programmierung für Wirtschaftsinformatik

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

WIRTSCHAFTSINFORMATIK

Datenbank und Informationssysteme

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

Eclipse und EclipseLink

XMLBeam. Einfach XML-Handling. W3L AG

Oliver Paulus, 7. Februar Spring Framework Einführung. Oliver Paulus, Was ist Spring?

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

Java Persistence API mit Hibernate

Scala kann auch faul sein

Angewandte Softwareentwicklung Serialisierung

SEP 114. Design by Contract

5. Übung zu Software Engineering

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

EJB 3 - Ein Blick über den Tellerrand. Heiko W. Rupp <hwr@pilhuhn.de>

Aspektorientierte Middleware Florian Wagner

Einführung in die Informatik Tools

Generisch entwickelte Software-Werkzeuge anpassbar wie ein Chamäleon

EJB 3 - Erfahrungen aus der Praxis. Heiko W. Rupp

WPF Steuerelemente Listbox, ComboBox, ListView,

Einführung in die Java- Programmierung

Handbuch für die Erweiterbarkeit

Programmierung von Java- Webanwendungen. paluno

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

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

Dennis Schulte / Tobias Flohre codecentric AG. Enterprise Java Batch mit Spring

Kapitel 14. Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken

App Entwicklung mit dem Android SDK

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Skalierbare Webanwendungen mit Python und Google App Engine

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),


Java Persistence mit Hibernate

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java Einführung Packages

Vorlesung "Software-Engineering"

Application Frameworks

Bean-Mapping mit MapStruct

Auszug aus JAX-WS Folien

Anleitung über den Umgang mit Schildern

10. Berechtigungsverwaltung Grundlagen der Programmierung II (Java)

Transkript:

Workshop Java Webentwicklung Einführung in Hibernate Ulrich Stärk

Ablauf Montag bis Donnerstag 09:00 Uhr s.t. Beginn, bis ca. 17:00 Uhr 1 Stunde Mittagspause Donnerstag Experiment Aufzeichnung der Programmiertätigkeit Anwesenheitspflicht Keine reguläre Lehrveranstaltung Keine Leistungspunkte oder Scheine, Teilnahmebestätigung möglich Workshop Keine Vorlesung Kurze Einführung in die jeweiligen Techniken, dann direkt Programmierung Bringt Euch ein, wenn Ihr das eine oder andere schon kennt! 2

Ablauf Montag: Hibernate Spring (sehr kurz) Dienstag: Tapestry Mittwoch: Weiterentwicklung unserer Webanwendung Tapestry Donnerstag: Weiterentwicklung unserer Webanwendung Experiment Bitte an ALLEN Tagen da sein, die Übungen bauen aufeinander auf! 3

Hibernate Object/Relational Mapping (ORM) automatische, transparente Abbildung von Objekten auf relationales Modell unter Zuhilfenahme von Metadaten, die die Abbildung beschreiben Wieso ORM? handgeschriebener JDBC Code teuer und unflexibel viele Probleme wie Vererbung, Assoziationen und Navigierung des Objektgraphen gelöst Wechsel des Datenbanksystems in der Regel unproblematisch 4

Einordnung Hibernate für sich erst einmal komplett benutzbar mit eigener API mit eigener Query Language (HQL) EJB3 Standard spezifiziert Enterprise Java Beans Teil 1 handelt von Session Beans, Message Driven Beans, Deployment, Programmiermodell etc. Teil 2 handelt von Persistenz ORM Metadaten, Interfaces, Query Language (JPA QL) Java Persistence API (JPA) Viele Konzepte von Hibernate flossen in die Entwicklung der JPA z.b. HQL JPA QL (mit ein paar wenigen Erweiterungen in HQL) JPA Umsetzungen sollen gegeneinander austauschbar sein und auch außerhalb eines EJB3 Containers laufen können 5

Komponenten Hibernate Core bietet die ORM Funktionalität Konfiguration und Mapping mit XML Metadaten Hibernate Annotations Mapping direkt mittels JPA oder Hibernate Annotationen in den einzelnen Klassen JPA Annotationen garantieren Austauschbarkeit mit anderen ORM Tools, die die JPA beherrschen Hibernate Annotationen bieten in einigen Fällen mehr Funktionalität Hibernate EntityManager Umsetzung der Programmier-Interfaces der JPA Aber auch Rückgriff auf Hibernate APIs möglich Alle zusammen sind eine komplette Implementierung der JPA 6

Konfiguration Ordner META-INF im Verzeichnis src, darin persistence.xml <?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="uebung1"> <properties> <property name="hibernate.archive.autodetection" value="class" /> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcdriver" /> <property name="hibernate.connection.url" value="jdbc:hsqldb:file:testdb;shutdown=true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.hsqldialect" /> <property name="hibernate.connection.username" value="sa" /> <property name="hibernate.connection.password" value="" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.connection.shutdown" value="true" /> </properties> </persistence-unit> </persistence> 7

Einfaches Mapping package workshop; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; @Entity public class Cat { private int id; private String name; private int age; @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getid() { return id; public void setid(int id) { this.id = id; public int getage() { return age; public void setage(int age) { this.age = age; public String getname() { return name; public void setname(string name) { this.name = name; 8

Einfaches Mapping package workshop; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.table; @Entity @Table(name="KATZE") public class Cat { private int id; private String name; private int age; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="CAT_ID") public int getid() { return id; public void setid(int id) { this.id = id; @Column(nullable=false) public int getage() { return age; public void setage(int age) { this.age = age; @Column(nullable=false) public String getname() { return name; public void setname(string name) { this.name = name; 9

equals() und hashcode() Wichtig: equals() und hashcode() überschreiben @Override public boolean equals(object o) { if(o == null o.getclass()!= this.getclass()) return false; return ((Cat)o).id == this.id; @Override public int hashcode() { return id; Besser: Natürliche Merkmale in equals() und hashcode() benutzen anstatt künstlichen Schlüssel (id) 10

Datenbankzugriff EntityManagerFactory emf = Persistence.createEntityManagerFactory("uebung1"); EntityManager em = emf.createentitymanager(); EntityTransaction tx = null; try { tx = em.gettransaction(); tx.begin(); /* tu irgendwas */ tx.commit(); catch (RuntimeException e) { if(tx!= null) tx.rollback(); e.printstacktrace(); finally { em.close(); 11

Instanzen Laden Anhand der ID Cat cat = em.find(cat.class, 1); Anhand des Namens mit JPA QL Query query = em.createquery("from Cat c where c.name=:name"); query.setparameter("name", "Felix"); /* alternativ: Query query = em.createquery("from Cat c where c.name=?"); query.setparameter(0, "Felix"); */ Cat cat = (Cat) query.getsingleresult(); Anhand des Namens mit Criteria API (native Hibernate API) Session session = (Session) em.getdelegate(); Criteria criteria = session.createcriteria(cat.class); criteria.add(expression.eq("name", "Felix")); Cat cat = (Cat) criteria.uniqueresult(); 12

Instanzen speichern Neues Objekt persistent machen Cat cat = new Cat(); cat.setname("felix"); cat.setage(1); em.persist(cat); Veränderungen an einem Objekt speichern Innerhalb eines persistence context: automatisch beim commit der nächsten Transaktion Außerhalb (detached instances): em.merge() 13

Lebenszyklus eines Objekts aus Christian Bauer, Gavin King: Java Persistence with Hibernate 14