Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Datenbank zu Unserer Anwendung Hinzufügen | Arbeiten Mit Datenbanken
Spring Boot Backend

bookDatenbank zu Unserer Anwendung Hinzufügen

Im vorherigen Kapitel haben wir behandelt, was JPA und Hibernate sind. In diesem Kapitel integrieren wir eine Datenbank in unsere Anwendung und führen CRUD-Operationen (Create, Read, Update, Delete) durch.

Beispiel für die Arbeit mit einer Datenbank:

Modellanpassung

Das erste, was wir tun müssen, ist das Modell zu annotieren, damit Hibernate damit arbeiten kann und versteht, zu welcher Tabelle es gehört.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

In der @Entity(name = "books")-Annotation ermöglicht der name-Parameter die Angabe des Namens der Entität, der standardmäßig dem Klassennamen entspricht.

Die @Table-Annotation wird verwendet, um spezifische Einstellungen für die mit der Entität verknüpfte Tabelle festzulegen.

In unserem Fall wird diese Tabelle durch Migrationen erstellt, daher müssen wir sie nicht manuell anlegen.

Unsere Entität muss außerdem automatisch eine ID generieren, um ihr einen eindeutigen Wert in der Datenbank zuzuweisen. Dafür kann die @Id-Annotation auf das Feld angewendet werden, das unsere ID repräsentiert, zusammen mit der @GeneratedValue-Annotation.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

Die Annotationen @Id und @GeneratedValue(strategy = GenerationType.UUID) geben an, dass das Id-Feld ein Primärschlüssel ist, der automatisch im UUID-Format generiert wird.

Dies gewährleistet eindeutige Zeichenfolgen-Identifikatoren für jeden Datensatz in der Tabelle, was für verteilte Systeme vorteilhaft ist und die globale Eindeutigkeit der Identifikatoren sicherstellt. UUIDs werden als Zeichenfolgen gespeichert.

Hinzufügen des Repositorys

Derzeit simuliert unser Repository eine Datenbank, indem es alle Entitäten in einer List speichert. Aber was wäre, wenn ich Ihnen sagen würde, dass die Verwendung einer echten Datenbank tatsächlich viel einfacher ist!

Um mit einer echten Datenbank zu interagieren, können wir das JpaRepository-Interface verwenden, das eine Vielzahl von vordefinierten Methoden für die Arbeit mit Daten bereitstellt.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

In JpaRepository<Book, String> geben wir zwei Parameter an: Book, das den Entitätstyp darstellt, mit dem das Repository arbeitet, und String, den Datentyp des Primärschlüssels (ID) für die Book-Entität.

Und das ist alles, was wir brauchen! Jetzt haben wir ein voll funktionsfähiges Repository!

Hauptmethoden von JpaRepository

Eigene SQL-Abfragen erstellen

Spring Data JPA kann Abfragen automatisch generieren, wenn die Methode nach einem Muster benannt ist, das mit der Datenstruktur übereinstimmt. Dies erfolgt durch die Verwendung von bestimmten Schlüsselwörtern, die angeben, wie die Abfrage aufgebaut werden soll.

Kurze Zusammenfassung des Videos

List<Book> findBookByAuthor(String author);

Diese Methode generiert automatisch eine SQL-Abfrage, die nach allen Büchern des angegebenen author sucht. Die generierte Abfrage sieht wie folgt aus:

SELECT * FROM book WHERE author = ?;

Funktionsweise

Der Methodenname findBookByAuthor(String author) ist wie folgt aufgebaut: Er beginnt mit dem Präfix findBook, was darauf hinweist, dass die Methode eine Suche durchführt. Anschließend folgt ByAuthor, das das Feld in der Book-Entität bezeichnet, das für die Suche verwendet wird.

Wenn diese Methode aufgerufen wird, generiert Spring Data JPA automatisch eine Abfrage, die nach Datensätzen sucht, bei denen das author-Feld mit dem übergebenen Parameter übereinstimmt.

Generieren von SQL-Abfragen mit @Query

Die @Query-Annotation in Spring Data JPA ermöglicht die Verwendung von JPQL und nativem SQL und bietet dadurch Flexibilität bei der Auswahl des geeigneten Ansatzes.

JPQL

JPQL (Java Persistence Query Language) arbeitet mit Objekten und deren Eigenschaften.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Diese Abfrage sucht nach allen Book-Objekten, bei denen das Feld author mit dem übergebenen Wert übereinstimmt. JPQL ist abstrakter und spiegelt die Struktur des Datenmodells wider.

Native SQL

Native SQL interagiert direkt mit Datenbanktabellen.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

In diesem Fall arbeitet die Abfrage auf der Tabelle book und ermöglicht die Verwendung spezifischer SQL-Funktionen und Optimierungen.

Auswahl einer Vorgehensweise

Für einfache Abfragen, die dem Datenmodell entsprechen, JPQL verwenden. Bei komplexen Abfragen oder wenn datenbankspezifische Funktionen benötigt werden, native SQL wählen.

@Query bietet somit die Flexibilität, einfach zwischen beiden Ansätzen zu wechseln, je nach Anforderung.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.45

bookDatenbank zu Unserer Anwendung Hinzufügen

Swipe um das Menü anzuzeigen

Im vorherigen Kapitel haben wir behandelt, was JPA und Hibernate sind. In diesem Kapitel integrieren wir eine Datenbank in unsere Anwendung und führen CRUD-Operationen (Create, Read, Update, Delete) durch.

Beispiel für die Arbeit mit einer Datenbank:

Modellanpassung

Das erste, was wir tun müssen, ist das Modell zu annotieren, damit Hibernate damit arbeiten kann und versteht, zu welcher Tabelle es gehört.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

In der @Entity(name = "books")-Annotation ermöglicht der name-Parameter die Angabe des Namens der Entität, der standardmäßig dem Klassennamen entspricht.

Die @Table-Annotation wird verwendet, um spezifische Einstellungen für die mit der Entität verknüpfte Tabelle festzulegen.

In unserem Fall wird diese Tabelle durch Migrationen erstellt, daher müssen wir sie nicht manuell anlegen.

Unsere Entität muss außerdem automatisch eine ID generieren, um ihr einen eindeutigen Wert in der Datenbank zuzuweisen. Dafür kann die @Id-Annotation auf das Feld angewendet werden, das unsere ID repräsentiert, zusammen mit der @GeneratedValue-Annotation.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

Die Annotationen @Id und @GeneratedValue(strategy = GenerationType.UUID) geben an, dass das Id-Feld ein Primärschlüssel ist, der automatisch im UUID-Format generiert wird.

Dies gewährleistet eindeutige Zeichenfolgen-Identifikatoren für jeden Datensatz in der Tabelle, was für verteilte Systeme vorteilhaft ist und die globale Eindeutigkeit der Identifikatoren sicherstellt. UUIDs werden als Zeichenfolgen gespeichert.

Hinzufügen des Repositorys

Derzeit simuliert unser Repository eine Datenbank, indem es alle Entitäten in einer List speichert. Aber was wäre, wenn ich Ihnen sagen würde, dass die Verwendung einer echten Datenbank tatsächlich viel einfacher ist!

Um mit einer echten Datenbank zu interagieren, können wir das JpaRepository-Interface verwenden, das eine Vielzahl von vordefinierten Methoden für die Arbeit mit Daten bereitstellt.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

In JpaRepository<Book, String> geben wir zwei Parameter an: Book, das den Entitätstyp darstellt, mit dem das Repository arbeitet, und String, den Datentyp des Primärschlüssels (ID) für die Book-Entität.

Und das ist alles, was wir brauchen! Jetzt haben wir ein voll funktionsfähiges Repository!

Hauptmethoden von JpaRepository

Eigene SQL-Abfragen erstellen

Spring Data JPA kann Abfragen automatisch generieren, wenn die Methode nach einem Muster benannt ist, das mit der Datenstruktur übereinstimmt. Dies erfolgt durch die Verwendung von bestimmten Schlüsselwörtern, die angeben, wie die Abfrage aufgebaut werden soll.

Kurze Zusammenfassung des Videos

List<Book> findBookByAuthor(String author);

Diese Methode generiert automatisch eine SQL-Abfrage, die nach allen Büchern des angegebenen author sucht. Die generierte Abfrage sieht wie folgt aus:

SELECT * FROM book WHERE author = ?;

Funktionsweise

Der Methodenname findBookByAuthor(String author) ist wie folgt aufgebaut: Er beginnt mit dem Präfix findBook, was darauf hinweist, dass die Methode eine Suche durchführt. Anschließend folgt ByAuthor, das das Feld in der Book-Entität bezeichnet, das für die Suche verwendet wird.

Wenn diese Methode aufgerufen wird, generiert Spring Data JPA automatisch eine Abfrage, die nach Datensätzen sucht, bei denen das author-Feld mit dem übergebenen Parameter übereinstimmt.

Generieren von SQL-Abfragen mit @Query

Die @Query-Annotation in Spring Data JPA ermöglicht die Verwendung von JPQL und nativem SQL und bietet dadurch Flexibilität bei der Auswahl des geeigneten Ansatzes.

JPQL

JPQL (Java Persistence Query Language) arbeitet mit Objekten und deren Eigenschaften.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Diese Abfrage sucht nach allen Book-Objekten, bei denen das Feld author mit dem übergebenen Wert übereinstimmt. JPQL ist abstrakter und spiegelt die Struktur des Datenmodells wider.

Native SQL

Native SQL interagiert direkt mit Datenbanktabellen.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

In diesem Fall arbeitet die Abfrage auf der Tabelle book und ermöglicht die Verwendung spezifischer SQL-Funktionen und Optimierungen.

Auswahl einer Vorgehensweise

Für einfache Abfragen, die dem Datenmodell entsprechen, JPQL verwenden. Bei komplexen Abfragen oder wenn datenbankspezifische Funktionen benötigt werden, native SQL wählen.

@Query bietet somit die Flexibilität, einfach zwischen beiden Ansätzen zu wechseln, je nach Anforderung.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5
some-alt