Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java EE 7: Geschäftsanwendungen

CRUD-Operationen implementieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Über den Datenlayer kann mit Hilfe des EntityManagers der Zugriff auf die Daten erfolgen. Hier erfahren Sie, wie Sie die CRUD-Operationen umsetzen können und implementieren den Datenlayer entsprechend.

Transkript

Der Zugriff auf Entitäten innerhalb einer Applikation erfolgt mit Hilfe eines EntityManagers. Dieser EntityManager bietet uns Möglichkeiten, dass wir Daten abrufen, ändern und anlegen können. In diesem Video werden wir uns deshalb mit dem EntityManager auseinander setzen und wir werden klären, wie wir die CRUD-Operation in der JPA und einfache Abfragen umsetzen können. JPA-Operationen sind generell so gestaltet, dass sie nur mit Hilfe einer EntityManager- Instanz funktionieren können. Damit dieser EntityManager natürlich vernünftig funktionieren kann, muss sich die persistence.xml-Datei in /META-INF Ordner befinden. Grundsätzlich gilt ebenfalls, dass Transaktionen automatisch vorgenommen werden. Wir können das Ganze auch händisch übersteuern, allerdings macht man das nur, wenn man genau weiß, warum und wann man das machen möchte. Das Standardverhalten der automatischen Transaktionen funktioniert nämlich ausnehmend gut. So ein EntityManager bietet uns verschiedene Operationen an. Die CRUD-Operationen stehen dabei für "Create", also das Anlegen eines Datensatzes, dies geschieht mit Hilfe der Methode "persist". "Read", das ist die Möglichkeit, dass ich einen Datensatz zum einen über seinen Primärschlüssel finden kann, mit Hilfe der "find" Methode, oder dass ich eine Abfrage anlegen kann, mit deren Hilfe ich einen Datensatz explizit identifizieren kann. Diese Abfrage wird dann mit Hilfe der JPQL, der Java Persistence Query Language formuliert und diese JPQL-Abfrage ist auf das Objekt ausgerichtet, also in dem Fall die Customer Instanz und wird dann ihrerseits zur Laufzeit in ein SQL-Statement übersetzt. Von der Notation her ist die JPQL der SQL sehr ähnlich. Das U in CRUD steht für "Update". Das ist eine Möglichkeit, um Datensätze zu aktualisieren. Da gibt es zwei Möglichkeiten, nämlich zum einen die Methode "merge", da geschieht folgendes: wenn ich dort eine Instanz einer Klasse reingebe, dann wird der Datensatz, der sich in der Datenbank findet, mit den Informationen aus der hereingegebenen Instanz überschrieben. die Methode "refresh" funktioniert genau andersrum: bei der Methode "refresh" ist das so, dass der Datensatz, den ich reingebe, mit den Informationen aus der Datenbank überschrieben wird, bedeutet, dass alle Änderungen dann verworfen sind. Das D in CRUD steht für "delete". Und damit kann ich einen Datensatz dann löschen. Wenn ich eine Abfrage definiere, mache ich das mit der Methode "createQuery" des EntityManagers. Und dieser Methode "createQuery" kann ich dann halt auch Parameter mitgeben. Damit bin ich dann in der Lage wirklich vollständige Abfragen zu formulieren. Das ganze hat sehr viel Ähnlichkeit mit SQL, aber bitte verwechseln Sie es nicht mit SQL. Sie arbeiten hier auf Objektebene und es gibt nicht alles, was es in SQL als Statements, beziehungsweise Anweisungen gibt Das Ergebnis der Abfrage rufe ich dann über die Methode "getResultList" ab und bekomme ich eine typisierte Liste von Ergebnissen zurück, die ich dann entsprechend zurückgeben kann. Generell kann ich diese Abfragen auf verschiedene Arten und Weisen ausführen. Zum einen gibt es die Möglichkeit eine Query zu notieren. Eine Query ist eine einfache Abfrage, die direkt im Quellcode des Data-Layers formuliert ist. Dann haben wir die Möglichkeit eine NamedQuery zu formulieren. Eine NamedQuery ist eine Anfrage, die hat allerdings einen Namen und ist dann auf Ebene einer Klasse definiert und das hat den gewaltigen Vorteil, dass ich nur eine einzige Stelle habe, wo ich diese Abfrage habe, und ich sie an verschiedenen Stellen wieder verwenden kann, das heißt, wenn ich was ändern muss, muss ich das eben nur an einer einzigen Stelle tun. Ebenfalls habe ich die Möglichkeit Native, also SQL-Abfragen zu formulieren. Das mache ich mit Hilfe einer NativeQuery. Auch eine NativeQuery kann benannt sein und dann ist das eine NamedNativeQuery und diese benannte Abfrage wird dann ebenfalls wieder auf Klassenebene per Annotation notiert. Und zu guter Letzt gibt es noch Abfragen auf StoredProcedures. Zum einen die StoredProcedureQuery, das ist die Abfrage auf eine StoredProcedure in einem Datenbanksystem. Wichtig natürlich, erstens das Datenbanksystem muss dort Procedures unterstützen und zweitens, das Ganze geht erst mit der JPA 2.1. Das heißt, in älteren Versionen gab es dort keine eingebaute Möglichkeit. Und dann gibt es noch die NamedStoredProcedureQuery, das ist eine benannte Abfrage, die letztlich wieder auf Klassenebene definiert ist und deswegen besser wartbar ist. Performenztechnisch bringen diese benannten Abfragen übrigens nichts. Es ist wirklich ein reiner Wartbarkeitsaspekt der hier greift. Nun werden wir uns damit auseinandersetzen wie wir in unserem Data-Layer, der ja rudimentär existiert, die CRUD-Operation und eine Abfrage auf die Datensätze implementieren können. In unserem Data-Layer können wir nun, anhand der besprochenen Informationen, die verschiedenen Operationen implementieren. Zunächst wollen wir einen Benutzer anlegen. Dies machen wir indem wir die Methode "persist" des EntityManager aufrufen und dabei, die zu speichernde Instanz übergeben. Dabei wird dieser Instanz schon automatisch der gerade erzeugte Primärschlüssel zugewiesen, sodass wir diese Instanz dann auch einfach zurückgeben können und sie wird den neuen Primärschlüssel beinhalten. Sie wird übrigens auch die neue Versionsinformation beinhalten, nur machen wir die ja nicht abrufbar. Das Updaten eines Datensatzes machen wir mit Hilfe der Methode "merge" des EntityManager. Diese Methode "merge" gibt uns eine Kopie, der übergebenen Instanz zurück, und diese Kopie geben wir dann an die aufrufende Komponente wiederum zurück. Bevor wir uns an das Löschen eines Datensatzes machen, Widmen wir uns zunächst einmal dem Abrufen eines einzelnen und eindeutig identifizierten Datensatzes. Dies machen wir über die Methode "find" das EntityManager und hier geben wird zunächst an, welcher Datentyp oder welche Art von Datensatz denn gesucht ist, und als zweiten Parameter geben wir den Primärschlüsselwert dieses Datensatzes an. In unserem Fall wollen wir eine Customer Instanz zurückgeben mit dem Primärschlüssel, der übergeben worden ist. Nun können wir uns dem Löschen widmen. Wir erzeugen uns hier zunächst einmal die Instanz des zu löschenden Customers, und zwar rufen wir die mit Hilfe der "getCustomer" Methode ab, die wir gerade eben implementiert haben. Dieser übergeben wird den Primärschlüssel und nun können wir mit Hilfe der "remove" Methode des EntityManagers die Instanz löschen. Zuletzt lassen wir eine Liste aller Customer zurückgeben. Dies machen wir indem wir eine Abfrage formulieren. Diese Abfrage findet auf Ebene des EntityManager statt, und zwar verwenden wir hier die Methode "createQuery" und übergeben hier zunächst die Abfrage, und zwar "SELECT c FROM Customer C", und als zweiten Parameter geben wir noch an, welcher Datentyp dann zurückgegeben werden soll, das ist eine Instanz der Customer Klasse. Damit kann JPA schon automatisch eine typisierte Liste erzeugen, wie wir dann über die Methode "getResultList" abrufen. Achten Sie bitte bei diesen JPQA-Statemants dadrauf, dass die Groß-/Kleinschreibung korrekt ist. Wir reden hier über eine Java Klasse und Java ist Case Sensitive, das bedeutet ein Customer mit einem großen C ist etwas anderes als eine customer Klasse mit einem kleinen c. Und hier müssen Sie genau darauf achten, dass sie eben die Groß-/Kleinschreibung richtig setzen, ansonsten fangen Sie sich Fehler ein. Damit haben wir unseren Data-Layer fertig implementiert. In diesem Video haben wir uns also damit auseinandergesetzt, wie wir die verschiedenen CRUD-Operationen des EntityManagers, beziehungsweise der JPA umsetzen können. Und wir haben dieses Wissen dann übernommen in unsere CustomerBean Klasse, die letztlich als Data-Layer fungieren soll.

Java EE 7: Geschäftsanwendungen

Verfolgen Sie, wie eine komplette Business-Applikation unter dem Einsatz des gesamten Java-Enterprise-Techologiestacks ensteht.

5 Std. 2 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!