Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Spring Framework Grundkurs

Hibernate – die Theorie

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Hibernate ist das bekannteste Framework rund um Persistenz von Java-Objekten und wesentlicher Bestandteil der Konzepte von Datenpersistenz des Spring Frameworks.

Transkript

Die Arbeit mit Datenbanken und SQL Queries ist oft sehr mühselig. Stunden bei der Anwendungsentwicklung werden nur darauf verwendet, sich an das entsprechende Datenmodell der jeweiligen Datenbanklösung anzupassen. Das Framework Hibernate nimmt sich genau dieser Problemstellung an, indem es die Komplexitäten der Datenbankwelt vom Programmierer fern hält. In diesem Video zeige ich ihnen, wie Sie zukünftig statt sich mit SQL Abfragen herumzuplagen mit Objekten direkt in Java arbeiten können. Das gesamte Prinzip von Hibernate geht also auf das so genannte objektrelationale Mapping zurück. Was nichts anderes heißt, als das Objekte, die konkret in der Java Anwendung existieren, auf Tabellen, die in der Datenbank existieren entsprechend gemappt werden. Allein aus dieser Tatsache ergeben sich schon einige Vorteile, denn es ist nicht länger notwendig, die verschiedenen Attribute bzw. Felder eines Objektes auf die entsprechenden Spalten einer Tabelle mappen zu müssen. Des weiteren nimmt es vor allem den Wind aus den Segeln, wenn es um Transaktionsmanagement geht. Durch einfache Kontrolle der Transaktionen auf einem deutlich höheren Abstraktionsniveau ist es also möglich, unabhängig von der angewendeten Datenbanklösung Transaktionen abwickeln zu können. Der größte Vorteil, der sich letztendlich ergibt ist, dass eine Menge Boilerplate Code, der im Falle von SQLO Statements die statisch definiert werden, vorliegen würde, sich entsprechend ersparen lässt. Prinzipiell gibt es mehrere Frameworks, die unter diesem Schirm stehen, die alle die so genannte Java Persistence API implementieren, einem Standard für objektrelationale Mapping Lösungen. Neben all diesen, wie z.B. Eclipse Link, ist Hibernate also die populärste dieser Bibliotheken und gilt auch als eine der Referenz- implementierungen der Java Persistence API Hibernate an sich ist schon sehr mächtig, allerdings gibt es einige Angriffspunkte, wo Spring sich darum bemüht, Hibernate noch mehr zu vereinfachen. Für genau diese Vorgänge gibt es in Spring das Paket für objektrelationales Mapping. Dieses umfasst den so genannten LocalSessionFactoryBean. Diese würde man also immer dann verwenden, wenn man konkret mit Hibernate und Spring zusammenarbeiten möchte. Zusätzlich ist es dann möglich, über die klassischen Standardannotationen entsprechend Entitäten zu deklarieren auf den Klassen selbst. Wenn ich also möchte, dass eine meiner Klassen zu einer Tabelle auf der Datenbank wird, würde ich schlicht und einfach die Annotation Entity über die jeweilige Klasse schreiben. Neben dem Paket für objektrelationales Mapping gibt es auch ein Paket für Transaktionsmanagement. Mit diesem ist es relativ einfach über die Deklaration von Methoden zu bestimmen, wann Transaktionen beginnen und wo sie enden. Wenn man nun also Hibernate initialisiert, gibt man im Regelfall auch immer so genannte Hibernate Properties an. Das sind Eigenschaften, die Hibernate braucht, um zu wissen, mit welcher Datenbank es arbeitet. Dazu gehört unter anderem und vor Allem der Dialekt der Datenbank, die darunter liegt. Dem geschuldet, dass viele Datenbanksysteme unterschiedliche Standards implementieren muss Hibernate genau wissen, welchen Standard es nutzen muss, für die Datenbank, die genutzt wird. Für alle weiteren Deklarationen verwendet man dann primär Annotationen auf den Klassen selbst. Die Annotation Entity erzeugt also aus einer Klasse ein entsprechendes Tabellenobjekt im Hintergrund. Alle auf dieser Klasse befindlichen Felder werden dann automatisch in Spalten umgewandelt. Da jede Tabelle auch einen Primärschlüssel braucht, kann dieser mit Hilfe von @Id und @GeneratedValue dementsprechend deklariert werden. Durch die Angabe von GeneratedValue wird auch dafür gesorgt, dass automatisch neue Zahlen vergeben werden, beispielsweise als Index. Relationen wären allerdings nicht Relationen, wenn man nicht auch Objekte miteinander verknüpfen könnte. Dafür gibt es weiterhin spezielle Annotationen, die Verbindungen angeben. Mit der Angabe von One2Many oder Many2One kann man nun also Verbindungen von 1 bis * oder * bis 1 herstellen zwischen verschiedenen Objekten. Der Vorgang an sich ist relativ simpel. Es wird nur eine Liste von Objekten deklariert, die entsprechend auf eine andere Klasse zeigen, und durch die Angabe der Annotation wird dies nun also als Tabellenverbindung erzeugt. Die Art und Weise, wie Hibernate nun diese Verbindungen zur Laufzeit abfragt, kann entweder LAZY oder EAGER sein. Das bedeutet dass Hibernate entweder die Daten sofort abruft, wenn man das Mutterobjekt abruft oder dass Hibernate die Daten erst dann abruft, wenn man die Verbindungen tatsächlich erst braucht. Mit der Angabe von mappedBy verweist man dann auch auf einen bestehenden Link. so dass einerseits auf der einen Klasse der Link abgebildet ist und auch auf der anderen Klasse, so dass sich beide jeweils finden können. Mit dem Zusammenhang ManyToMany lassen sich dann auch Mehrfachbeziehungen deklarieren, die im Regelfall in einer eigenen Tabelle im Hintergrund existieren. Um nun bestimmte Objekte abfragen zu können würde man nicht wie herkömmlich die Structured Query Language verwenden sondern es gibt eine von Hibernate selbst entworfene Sprache, die ähnlich der SQL Sprache ist. Diese nennt sich Hibernate Query Language. Der wesentliche Unterschied ist, dass man in der Spezifikation nicht mehr mit Tabellennamen arbeitet sondern mit den tatsächlichen Objektnamen bzw. Klassennamen. Durch Verweise auf entsprechende Felder einer Klasse können dann auch komplexere Abfragen mit Where und Ähnlichem konstruiert werden. Prinzipiell lassen sich so viele Mechanismen von SQL abdecken, sei es nun Where, Join oder andere Dinge. Die Vorteile, die sich aus Sicht der Anwender hierbei ergeben, ist dass die Abfrage deutlich näher am Programmcode orientiert ist. Außerdem handelt es sich damit schlicht und einfach um eine Abstraktion von den Komplexitäten der jeweiligen Datenbank. Weshalb die Anwendung am Ende des Tages auch zwischen verschiedenen Datenbanken portiert werden kann ohne weiteren Aufwand. Eine solche Abfrage mit der Hibernate Query Language würde man nun also anhand eines so genannten NamedQuery spezifizieren. Dieser befindet sich immer auch dort, wo die jeweilige Entity ist. Damit werden also Abfragen auch mit ihren Klassen assoziiert.

Spring Framework Grundkurs

Steigen sie zum Java-Champion auf und meistern Sie den Umgang mit dem Spring Framework.

2 Std. 4 min (20 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Spring Framework Spring Framework 3
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.09.2014

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!