Heim >Java >javaLernprogramm >Wie SpringBoot das JPA-Framework integriert

Wie SpringBoot das JPA-Framework integriert

王林
王林nach vorne
2023-05-19 09:52:501904Durchsuche

    1. Überblick über den Spring Boot-Datenzugriff

    Spring Data ist eine Open Source Framework zur Vereinfachung des Datenbankzugriffs und zur Unterstützung von Cloud-Diensten, bereitgestellt von Spring. Es handelt sich um ein Dachprojekt, das eine große Anzahl von Datenzugriffslösungen für relationale und nicht relationale Datenbanken umfasst. Es soll uns die schnelle und einfache Nutzung verschiedener Datenzugriffstechnologien ermöglichen. Standardmäßig verwendet Spring Boot die Methode der Integration von Spring Data, um die Datenzugriffsschicht zu vereinheitlichen. Durch das Hinzufügen einer großen Anzahl automatischer Konfigurationen, die Einführung verschiedener Datenzugriffsvorlagen xxxTemplate und einer einheitlichen Repository-Schnittstelle wird der Betrieb der Datenzugriffsschicht vereinfacht.

    Spring Data bietet Unterstützung für mehrere Arten von Datenbanken. Spring Boot integriert und verwaltet die von Spring Data unterstützten Datenbanken und stellt verschiedene Abhängigkeitsstarter bereit. Sie können eine Tabelle verwenden, um die häufig verwendeten Datenbankabhängigkeitsstarter von Spring Boot aufzulisten.

    spring-boot-starter-data-mongodbMongoDB und Spring Data MongoDB-Starter

    2. Einführung in Spring Data JPA

    JPA (Java Persistence API, Java Persistence API) ist die von Sun offiziell vorgeschlagene Java-Persistenzspezifikation. Sie stellt ein Objekt für Java-Entwickler bereit verwaltet relationale Daten in Java. Sein Hauptzweck besteht darin, bestehende Persistenzentwicklungsarbeiten zu vereinfachen und die ORM-Technologie (Object Relational Mapping, Object/Relational Mapping) zu integrieren. Basierend auf der JPA-Spezifikation nutzt Spring Data seine Vorteile voll aus und schlägt das Spring Data JPA-Modul vor, um Persistenzoperationen für ORM-Relationsdaten durchzuführen.

    Spring Data JPA ist eine Reihe von JPA-Anwendungsframeworks, die von Spring basierend auf dem ORM-Framework und den JPA-Spezifikationen gekapselt werden. Es bietet allgemeine Funktionen wie Hinzufügen, Löschen, Ändern und Abfragen und ermöglicht Entwicklern die Implementierung von Daten mit weniger Codeaufwand und gleichzeitig einfacher Erweiterbarkeit. Bevor wir die JPA-Integration von Spring Boot vorstellen, stellen wir kurz die grundlegende Verwendung von Spring Data JPA vor.

    2.1 ORM-Entitätsklasse schreiben

    Das Spring Data JPA-Framework verarbeitet Daten mit ORM-Beziehungen. Wenn Sie also Spring Data JPA verwenden, müssen Sie zunächst eine Entitätsklasse mit The schreiben Die Datentabelle wird zugeordnet und die Zuordnungsbeziehung wird konfiguriert.

    @Entity(name = "t_comment")  // 设置ORM实体类,并指定映射的表名
    public class Discuss {
        @Id   // 表明映射对应的主键id
        @GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键自增策略
        @Column(name = "article_id")  // 指定映射的表字段名
        private Integer articleId;
        // Generate: Getter and Setter、toString()
    }

    In Bezug auf den obigen Code wird Bruder Yi kurz die verwendeten Anmerkungen erläutern.

    Verwenden Sie die Annotation @Entity, um anzugeben, dass Sie die Entitätsklasse der Datenbank zuordnen möchten. Zu diesem Zeitpunkt ist der Name der Datenbanktabelle standardmäßig der erste Buchstabe des Klassennamens in Kleinbuchstaben. Natürlich können Sie auch das Namensattribut verwenden, um den zugeordneten Tabellennamen anzugeben.

    @ld: Auf dem Klassenattribut oder der Getter-Methode markiert, was darauf hinweist, dass ein bestimmtes Attribut dem Primärschlüssel in der Tabelle entspricht.

    Die Annotation @GeneratedValue kann weggelassen werden. Sie wird an derselben Position wie die Annotation @ld markiert und dient zur Definition der dem Attribut entsprechenden Primärschlüsselgenerierungsstrategie. Zu den von Spring Data JPA unterstützten Strategien zur Generierung von Primärschlüsseln gehören TABLE (Verwenden Sie eine bestimmte Datenbanktabelle zum Speichern des Primärschlüssels), SEQUENCE (eine Strategie zur Generierung von Datenbank-Primärschlüsseln, die die automatische Inkrementierung von Primärschlüsseln nicht unterstützt), IDENTITY (automatische Primärschlüsselgenerierung). Inkrement) und AUTO (JPA wählt unabhängig die ersten drei geeigneten Strategien aus, die die Standardoptionen sind).

    Wenn das Klassenattribut und der Tabellenfeldname unterschiedlich sind, kann die @Column-Annotation in Verbindung mit dem Namensattribut verwendet werden, um den Tabellenfeldnamen anzugeben, der dem Klassenattribut entspricht.

    2.2 Repository-Schnittstelle schreiben

    Entsprechende Repository-Schnittstellen für verschiedene Tabellendatenoperationen schreiben und bei Bedarf entsprechende Datenoperationsmethoden schreiben.

    public interface DiscussRepository extends JpaRepository<Discuss, Integer> {
        // 1.查询author非空的Discuss评论集合(JPA支持的方法名关键字查询方式)
        List<Discuss> findByAuthorNotNull();
        // 2.根据文章id分页查询Discuss评论集合
        @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1")
        List<Discuss> getDiscussPaged(Integer articleid, Pageable pageable);
        // 3.使用元素SQL语句,根据文章id分页查询Discuss评论集合,nativeQuery为true表示用来编写原生SQL语句 
        @Query(value = "SELECT * FROM t_comment WHERE article_Id = ?1", nativeQuery = true)
        List<Discuss> getDiscussPaged2(Integer articleid, Pageable pageable);
        //4.根据评论id修改评论作者author
        @Transactional // 表示支持事务管理
        @Modifying // 表示支持数据变更
        @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
        Integer updateDiscuss(String author, Integer id);
        // 5.根据评论id删除评论
        @Transactional
        @Modifying
        @Query("DELETE t_comment c WHERE c.id = ?1")
        Integer deleteDiscuss(Integer id);
    }

    Bezüglich der besonderen Anforderungen beim Schreiben der Repository-Schnittstelle wird Bruder Yi es allen erklären.

    2.2.1 Erben Sie die XXRepositoryffbe4eed12645b467bc428156552ef14-Schnittstelle

    Wenn wir Spring Data JPA verwenden, um die Repository-Schnittstelle anzupassen, müssen wir die XXRepositoryffbe4eed12645b467bc428156552ef14-Schnittstelle erben, wobei T die zu bedienende Entitätsklasse darstellt und ID den Primärschlüsseldatentyp der Entitätsklasse darstellt. Im obigen Beispiel entscheiden wir uns für die Vererbung der JpaRepository-Schnittstelle. Die Vererbungsstruktur von JpaRepository ist in der folgenden Abbildung dargestellt.

    Die an der Vererbungsstruktur der JpaRepository-Schnittstelle beteiligten Schnittstellen werden im Folgenden wie folgt erläutert.

    (1) Repository ist die übergeordnete Schnittstelle der obersten Ebene, die von Spring Data JPA zum Anpassen der Repository-Schnittstelle bereitgestellt wird. In dieser Schnittstelle sind keine Methoden deklariert.

    (2) Die CrudRepository-Schnittstelle ist eine der geerbten Schnittstellen von Repository und enthält einige grundlegende CRUD-Methoden.

    (3) Die PagingAndSortingRepository-Schnittstelle erbt die CrudRepository-Schnittstelle und bietet zwei Methoden zum Paging und Sortieren.

    (4) Die QueryByExampleExecutor-Schnittstelle ist die übergeordnete Schnittstelle der obersten Ebene für bedingte Kapselungsabfragen und ermöglicht die Ausführung komplexer bedingter Abfragen über Beispielinstanzen.

    Die JpaRepository-Schnittstelle erbt sowohl die PagingAndSortingRepository-Schnittstelle als auch die QueryByExampleExecutor-Schnittstelle und bietet einige zusätzliche Datenoperationsmethoden. Normalerweise entscheiden wir uns beim Schreiben einer benutzerdefinierten Repository-Schnittstellendatei direkt dafür, die JpaRepository-Schnittstelle zu erben.

    2.2.2 Mehrere Möglichkeiten zum Bearbeiten von Daten

    Bei der Verwendung von Spring Data JPA für Datenoperationen gibt es viele Implementierungsmethoden. Die Hauptmethoden sind wie folgt.

    (1). Wenn die benutzerdefinierte Schnittstelle die JpaRepository-Schnittstelle erbt, enthält sie standardmäßig einige häufig verwendete CRUD-Methoden.

    (2). In der benutzerdefinierten Repository-Schnittstelle können Sie die @Query-Annotation mit SQL-Anweisungen verwenden, um Daten zu überprüfen, zu ändern und zu löschen.

    (3) In der benutzerdefinierten Repository-Schnittstelle können Sie das Schlüsselwort „Methodenname“ direkt verwenden, um Abfragevorgänge durchzuführen.

    Unter diesen sind die in Spring Data JPA unterstützten Schlüsselwörter für Methodennamen und entsprechende SQL-Fragmentbeschreibungen in der folgenden Tabelle aufgeführt.

    2.2.3 @Transactional-Transaktionsverwaltung

    In der benutzerdefinierten Repository-Schnittstelle für Datenänderungsvorgänge (Änderung, Löschung), unabhängig davon, ob die @Query-Annotation verwendet wird, Sie Sie müssen die Annotation @Transactional über der Methode zur Transaktionsverwaltung hinzufügen, andernfalls tritt während der Programmausführung eine InvalidDataAccessApiUsageException auf. Wenn die Annotation @Transactional zur Business-Layer-Serviceklasse hinzugefügt wurde, die die Repository-Schnittstellenmethode für die Transaktionsverwaltung aufruft, kann die Annotation @Transactional in der Repository-Schnittstellendatei weggelassen werden.

    2.2.4 @Moditying-Annotation

    Verwenden Sie in der benutzerdefinierten Repository-Schnittstelle zusätzlich zur Verwendung von @Query die @Query-Annotation, um Datenänderungsvorgänge (Änderung, Löschung) durchzuführen Annotation muss auch die Annotation @Moditying hinzugefügt werden, um Datenänderungen anzuzeigen.

    2.3.5 Komplexe Bedingungsabfrage

    JPA unterstützt auch komplexe Bedingungsabfragen mithilfe von Beispielinstanzen. Fragen Sie beispielsweise nach der Methode findAll(Example1eefd63bbe027a2807ccada294a3372c var1), die bereits in der JpaRepository-Schnittstelle vorhanden ist.

    3. Verwenden Sie Spring Boot, um JPA zu integrieren.

    Verwenden Sie Spring Boot, um JPA zu integrieren. Die spezifischen Schritte sind wie folgt.

    3.1 Spring Data JPA-Abhängigkeitsstarter hinzufügen

    Spring Data JPA-Abhängigkeitsstarter in der pom.xml-Datei des Projekts hinzufügen.

    Hinweis:

    Wir haben die Versionsnummer für Spring Data JPA nicht geschrieben. Dies liegt daran, dass Spring Boot die Versionsnummer von Spring Data JPA einheitlich verwaltet.

    3.2 ORM-Entitätsklasse schreiben

    Nehmen Sie zur Vereinfachung der Bedienung die zuvor erstellte Datenbanktabelle t_comment als Beispiel, um die entsprechende Entitätsklasse zu schreiben, und kopieren Sie die zuvor erstellte Kommentarklasse und wiederholen Sie es. Benennen Sie es „Diskutieren“ und fügen Sie entsprechende JPA-Anmerkungen für die Zuordnungskonfiguration hinzu.

    3.3 Schreiben der Repository-Schnittstelle

    Erstellen Sie eine Repository-Schnittstelle DiscussRepository unter dem com.cy.repository-Paket zum Betreiben der Datenbanktabelle t_comment.

    3.4 Schreiben Sie Komponententests für Schnittstellenmethodentests.

    Kopieren Sie die Testklasse Chapter03ApplicationTests am aktuellen Speicherort und benennen Sie sie in JpaTests um, um JPA-bezogene Komponententests zu schreiben. Nach geringfügiger Änderung Schreiben Sie für den Inhalt die Testmethode, die der DiscussRepository-Schnittstelle entspricht.

    Die Testmethode verwendet die JpaRepository-Standardmethode, das Schlüsselwort für den Methodennamen, die @Query-Annotation und gekapselte Beispielparameter, um Datenoperationen durchzuführen.

    3.5 Integrationstest

    Wählen Sie die Unit-Test-Methode in der JpaTests-Testklasse aus, um den Effekt zu demonstrieren.

    Name Beschreibung
    mybatis-spring-boot-starter MyBatis-Starter
    mybatis-plus-boot -starter MyBatis-Plus-Launcher
    spring-boot-starter-data-jpa Spring Data JPA Starter mit Hibernate
    spring-boot starter-data-redis Redis-Schlüsselwert-Datenspeicherung mit Spring Data Redis und Jedis Client-seitig Starter
    spring-boot-starter-data-neo4j Neo4j-Grafikdatenbank und Spring Data Neo4j-Starter#🎜🎜 #

    Das obige ist der detaillierte Inhalt vonWie SpringBoot das JPA-Framework integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen