Kursinhalt
Spring Boot Backend
Spring Boot Backend
Die Datenbank zu Unserer Anwendung Hinzufügen
Im vorherigen Kapitel haben wir behandelt, was JPA und Hibernate sind. In diesem Kapitel werden wir eine Datenbank in unsere Anwendung integrieren und versuchen, CRUD-Operationen (Create, Read, Update, Delete) durchzuführen.
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
@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 Namen der Klasse entspricht.
Die @Table
Annotation wird verwendet, um spezifische Einstellungen für die Tabelle festzulegen, die mit der Entität verbunden ist.
In unserem Fall wird diese Tabelle durch Migrationen erstellt, sodass wir sie nicht manuell erstellen müssen.
Wir benötigen auch, dass unsere Entität automatisch eine ID generiert, um ihr einen einzigartigen Wert in der Datenbank zuzuweisen. Um dies zu erreichen, können wir die @Id
Annotation auf dem Feld verwenden, das unsere ID darstellt, zusammen mit der @GeneratedValue
Annotation.
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 Zeichenfolgenkennungen für jeden Datensatz in der Tabelle, was für verteilte Systeme von Vorteil ist und die globale Eindeutigkeit der Kennungen garantiert. UUID werden als Zeichenfolgen gespeichert.
Hinzufügen des Repositories
Derzeit simuliert unser Repository eine Datenbank, indem es alle Entitäten in einer List
speichert. Aber was, 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 eingebauten Methoden für die Arbeit mit Daten bietet.
BookRepository
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }
In JpaRepository<Book, String>
, übergeben wir zwei Parameter: Book
, das den Entitätstyp darstellt, mit dem das Repository arbeiten wird, und String
, das der Datentyp des Primärschlüssels (ID) für die Book
Entität ist.
Und das ist alles, was wir brauchen! Jetzt haben wir ein voll funktionsfähiges Repository!
Hauptmethoden von JpaRepository
Erstellen benutzerdefinierter SQL-Abfragen
Spring Data JPA kann automatisch Abfragen generieren, wenn die Methode gemäß einem Muster benannt ist, das mit der Datenstruktur übereinstimmt. Dies geschieht durch die Verwendung von spezifischen Schlüsselwörtern, die angeben, wie die Abfrage konstruiert werden soll.
Kurze Zusammenfassung des Videos
Diese Methode generiert automatisch eine SQL-Abfrage, die nach allen Büchern des angegebenen author
sucht. Die generierte Abfrage wird folgendermaßen aussehen:
Wie es funktioniert
Der Methodenname findBookByAuthor(String author)
wird wie folgt konstruiert: Er beginnt mit dem Präfix findBook
, was darauf hinweist, dass die Methode eine Suche durchführt. Danach folgt ByAuthor
, was das Feld in der Book
-Entität darstellt, 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 bereitgestellten Parameter übereinstimmt.
Generieren von SQL-Abfragen mit der @Query
Die @Query
Annotation in Spring Data JPA ermöglicht es Ihnen, sowohl JPQL als auch native SQL zu verwenden, was Flexibilität bei der Wahl des geeigneten Ansatzes bietet.
JPQL
JPQL (Java Persistence Query Language) arbeitet mit Objekten und deren Eigenschaften.
Diese Abfrage sucht nach allen Book
Objekten, bei denen das author
Feld mit dem angegebenen Wert übereinstimmt. JPQL ist abstrakter und spiegelt die Datenmodellstruktur wider.
Native SQL
Native SQL interagiert direkt mit Datenbanktabellen.
In diesem Fall operiert die Abfrage auf der book
Tabelle, was die Verwendung spezifischer SQL-Funktionen und Optimierungen ermöglicht.
Auswahl eines Ansatzes
Wenn Sie eine einfache Abfrage benötigen, die mit dem Datenmodell übereinstimmt, verwenden Sie JPQL. Wenn eine komplexe Abfrage oder datenbankspezifische Funktionen erforderlich sind, wählen Sie native SQL.
Daher bietet @Query
die Flexibilität, einfach zwischen den beiden Ansätzen basierend auf Ihren Bedürfnissen zu wechseln.
Danke für Ihr Feedback!