Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Hibernate-Konfiguration und Entitäten | Grundlagen von Hibernate
Java-Datenmanipulation mit Hibernate
course content

Kursinhalt

Java-Datenmanipulation mit Hibernate

Java-Datenmanipulation mit Hibernate

1. JDBC-Übersicht
2. Grundlagen von Hibernate
3. Letzte Feinabstimmungen

book
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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. SQL-Anzeige- und Formatierungseinstellungen:

    • show_sql: Wenn true, zeigt Hibernate alle SQL-Abfragen in der Konsole an;
    • format_sql: Wenn true, formatiert SQL-Abfragen für bessere Lesbarkeit.
  6. Sitzungsverwaltung:

    • hibernate.current_session_context_class: Gibt an, wie der aktuelle Sitzungskontext verwaltet werden soll, hier über Threads (thread), was die Verwendung von SessionFactory.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 oder protected Konstruktor ohne Argumente haben. Hibernate verwendet diesen Konstruktor, um Objekte der Entity-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?

Was ist der erste Schritt bei der Integration von Hibernate in Ihr Projekt?

Was ist der erste Schritt bei der Integration von Hibernate in Ihr Projekt?

Wählen Sie die richtige Antwort aus

Welche Datei wird zur Konfiguration von Hibernate verwendet?

Welche Datei wird zur Konfiguration von Hibernate verwendet?

Wählen Sie die richtige Antwort aus

Was ist der Zweck der `@Entity`-Annotation in Hibernate?

Was ist der Zweck der @Entity-Annotation in Hibernate?

Wählen Sie die richtige Antwort aus

Was zeigt die `@Id`-Annotation in einer Hibernate-Entitätsklasse an?

Was zeigt die @Id-Annotation in einer Hibernate-Entitätsklasse an?

Wählen Sie die richtige Antwort aus

Wie bestimmt Hibernate, welchen SQL-Dialekt es für die Generierung von datenbankspezifischen SQL-Abfragen verwenden soll?

Wie bestimmt Hibernate, welchen SQL-Dialekt es für die Generierung von datenbankspezifischen SQL-Abfragen verwenden soll?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 2
We're sorry to hear that something went wrong. What happened?
some-alt