Kursinhalt
Java-Datenmanipulation mit Hibernate
Java-Datenmanipulation mit Hibernate
Hibernate-Konfiguration und Entitäten
Lassen Sie uns mit dem Lernen von Hibernate beginnen, indem wir die Grundlagen von Schnittstellen und Annotationen behandeln. Das Erste, was wir tun sollten, ist, Hibernate in Ihr Projekt zu integrieren. Es beginnt, wie immer, mit dem Importieren von Abhängigkeiten.
Importieren und Konfigurieren von Hibernate
Beginnen wir mit dem bekannten Verfahren, Hibernate in das Projekt zu importieren. Dazu müssen wir die bereits bekannte pom.xml
-Datei öffnen und den Hibernate-Abhängigkeitsimport dort hinzufügen. Die neueste Version von Hibernate finden Sie unter diesem Link.
Wie Sie sehen können, verwende ich die Version 6.3.1
, die zum Zeitpunkt der Erstellung dieses Kurses die neueste war. Ihre Version kann leicht variieren, aber ich glaube, dass die Kernannotationen und Funktionen gleich bleiben werden.
Ein Import wird nicht ausreichen, daher müssen wir eine weitere Abhängigkeit importieren, um unsere Anwendung mit dem MySQL-Datenbankverwaltungssystem (DBMS) zu verbinden. Genauer gesagt müssen wir den JDBC-Connector für MySQL importieren, den wir verwenden werden, um die Verbindung zur Datenbank herzustellen.
Sie können die neueste Version unter diesem Link finden.
hibernate.cfg.xml
Wir haben den Importprozess abgeschlossen und müssen nun Hibernate korrekt konfigurieren. Dies werden wir in der Datei hibernate.cfg.xml
tun, die sich im Ordner src/main/resources
befinden sollte.
Ich werde Ihnen eine Vorlage zur Verfügung stellen, wie die Konfiguration an diesem Punkt im Kurs aussehen sollte, und dann werde ich erklären, was sie bedeutet:
-
XML-Deklaration und DOCTYPE:
<?xml version="1.0" encoding="utf-8"?>
deklariert, dass dies eine XML-Datei Version 1.0 mit UTF-8-Kodierung ist;<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
gibt den Dokumenttyp an und verweist auf die DTD für die Hibernate-Konfiguration, was bei der Validierung der XML-Dateistruktur hilft.
-
Session Factory Konfiguration:
- Das
<hibernate-configuration>
-Element umschließt die gesamte Hibernate-Konfiguration; - Innerhalb von
<session-factory>
werden die Einstellungen für die Hibernate-Session-Factory festgelegt, die die Datenbanksitzungen verwaltet.
- Das
-
JDBC-Einrichtung:
hibernate.connection.driver_class
: JDBC-Treiberklasse für die Datenbankverbindung, hier für MySQL.hibernate.connection.url
: Datenbankverbindungs-URL;hibernate.connection.username
: Benutzername für den Datenbankzugriff;hibernate.connection.password
: Passwort für den Datenbankzugriff.
-
Dialect-Einrichtung:
hibernate.dialect
: Weist Hibernate an, welchen SQL-Dialekt es für die Generierung von datenbankspezifischen SQL-Abfragen verwenden soll, hier für MySQL.
-
SQL-Anzeige- und Formatierungseinstellungen:
show_sql
: Wenntrue
, zeigt Hibernate alle SQL-Abfragen in der Konsole an;format_sql
: Wenntrue
, formatiert SQL-Abfragen für bessere Lesbarkeit.
-
Sitzungsverwaltung:
hibernate.current_session_context_class
: Gibt an, wie der aktuelle Sitzungskontext verwaltet werden soll, hier über Threads (thread
), was die Verwendung vonSessionFactory.getCurrentSession()
ermöglicht, um die aktuelle Sitzung im Thread zu erhalten.
Diese Einrichtung initialisiert und konfiguriert die Hibernate-Umgebung, definiert, wie die Anwendung mit der Datenbank verbindet, welche SQL-Einstellungen verwendet werden sollen und wie Sitzungen für Datenbankinteraktionen verwaltet werden.
In unserem Fall müssen Sie in dieser Konfiguration nur den Link zu Ihrer Datenbank angeben (falls der Name von dem abweicht, den wir im vorherigen Kapitel erstellt haben), den MySQL-Benutzernamen, der normalerweise 'root' ist, und das Passwort. Sie können die Adresse Ihrer Datenbank und die Tabelle, mit der Sie arbeiten werden, in MySQL Workbench finden, wie in den Screenshots gezeigt:
Entität
Da wir nun die Datenbankverbindung und Hibernate konfiguriert haben, ist es an der Zeit, mit Entitäten zu arbeiten. Lassen Sie uns damit beginnen, zu verstehen, worum es bei einer Klassenentität in Hibernate geht:
Damit eine Klasse in Hibernate als Entitätsklasse gilt, muss sie einige Anforderungen erfüllen:
-
@Entity
Annotation: Die Klasse muss mit@Entity
annotiert sein, was Hibernate anzeigt, dass diese Klasse eine Entitätsklasse ist. Diese Annotation teilt Hibernate mit, die Klasse als Entität zu behandeln, die auf eine Datenbanktabelle abgebildet werden muss; -
Konstruktor ohne Argumente: Die Entitätsklasse sollte einen
public
oderprotected
Konstruktor ohne Argumente haben. Hibernate verwendet diesen Konstruktor, um Objekte derEntity
-Klasse zu instanziieren; -
Identifikator-Attribut: Jede Entitätsklasse muss einen Primärschlüssel haben, der mit der
@Id
-Annotation abgebildet wird. Dieses Attribut dient als eindeutiger Identifikator für jede Entitätsinstanz; -
Klassenattribute: Die Attribute der Klasse repräsentieren die Spalten der Tabelle. Diese können mit Annotations wie
@Column
auf Datenbankspalten abgebildet werden; -
Zugriffsmodifikatoren: Obwohl es keine strikte Anforderung ist, ist es eine gute Praxis, Felder
private
zu machen und öffentliche Getter und Setter bereitzustellen. Hibernate kann auf Felder direkt oder über diese Getter und Setter zugreifen.
Ein Beispiel für eine Entity
-Klasse aus dem vorherigen Kapitel:
Wie Sie sehen können, replizieren wir die Werte aus der Tabelle in dieser Entitätsklasse. Wir verwenden auch Project Lombok, um etwas Platz auf Ihrem Bildschirm zu sparen :).
Wir verwenden Anmerkungen wie @NoArgsConstructor
und @Data
aus dem Project Lombok, um diese Klasse den Anforderungen einer Entitätsklasse anzupassen.
Als nächstes gehen wir Schritt für Schritt vor. Wir haben die Klasse Employee
genannt, weil diese Klasse als Modell und Darstellung eines Objekts aus der employees
-Tabelle dient. Wir geben den Tabellennamen in den Parametern der @Table
-Anmerkung wie folgt an: @Table(name = "employees")
. Wir markieren diese Klasse auch mit der @Entity
-Anmerkung.
Hinweis
In Java werden viele Dinge mit Anmerkungen gemacht, daher werden Sie oft auf eine große Anzahl von Anmerkungen stoßen. Zum Beispiel ist das Spring Boot Framework auch fast vollständig auf Anmerkungen aufgebaut und wird ständig in der Entwicklung verwendet.
In der Employee
-Klasse gibt es ein id
-Feld, das einen eindeutigen Bezeichner darstellt. Wie in den Anforderungen angegeben, haben wir es mit der @Id
-Anmerkung und @GeneratedValue
gekennzeichnet. Die zweite Anmerkung wird verwendet, um den Wert des id
-Attributs automatisch zu inkrementieren, wenn ein Element hinzugefügt wird, um sicherzustellen, dass es keine doppelten IDs in der Tabelle gibt. Auf diese Weise können wir die Einzigartigkeit jedes Elements in der Tabelle bewahren.
Hinweis
Zum Beispiel, wenn die maximale ID in der Tabelle 5 ist, müssen wir beim Hinzufügen eines neuen Elements keine neue ID angeben; sie wird automatisch inkrementiert und der Wert 6 zugewiesen.
Jedes der anderen Attribute, die direkt den Spalten in der employees
-Tabelle entsprechen, annotieren wir mit @Column
, wobei wir den Spaltennamen in der Tabelle angeben. Dies ermöglicht es Hibernate, die Spalten, die wir benötigen, genau zu identifizieren.
Zusammenfassender Algorithmus
Nun, fassen wir den Algorithmus zusammen:
- Eine Entitätsklasse repräsentiert eine Tabelle, und Objekte dieser Klasse repräsentieren Zeilen in dieser Tabelle und speichern deren Werte;
- Eine solche Klasse sollte Felder haben, die mit den Spalten in der Tabelle identisch sind. Zusätzliche Felder können ebenfalls hinzugefügt werden, wenn dies durch die Geschäftslogik erforderlich ist;
- Die Klasse sollte mit der
@Entity
-Anmerkung markiert werden, und die entsprechenden Felder sollten Anmerkungen wie@Column
,@Id
und@GeneratedValue
verwenden; - Es ist eine gute Praxis, Felder in einer solchen Klasse
private
zu machen und über Getter und Setter auf sie zuzugreifen; - Zusätzliche Methoden können zu solchen Klassen hinzugefügt werden, wenn die Geschäftslogik dies erfordert, aber es wird nicht empfohlen. Methoden zur Arbeit mit dieser Klasse sollten in separaten Schnittstellen und Implementierungsklassen platziert werden. Dies wird durch das DAO-Entwurfsmuster geleitet.
In den kommenden Kapiteln werden Sie Ihre eigene Entitätsklasse erstellen, die alle diese Standards erfüllt. In der Praxis gewinnen Sie immer ein Verständnis dafür, wie und was zu verwenden ist.
1. Was ist der erste Schritt bei der Integration von Hibernate in Ihr Projekt?
2. Welche Datei wird zur Konfiguration von Hibernate verwendet?
3. Was ist der Zweck der @Entity
-Annotation in Hibernate?
4. Was zeigt die @Id
-Annotation in einer Hibernate-Entitätsklasse an?
5. Wie bestimmt Hibernate, welchen SQL-Dialekt es für die Generierung von datenbankspezifischen SQL-Abfragen verwenden soll?
Danke für Ihr Feedback!