ホームページ > Java > &#&チュートリアル > SpringBoot が JPA フレームワークを統合する方法

SpringBoot が JPA フレームワークを統合する方法

王林
リリース: 2023-05-19 09:52:50
転載
1957 人が閲覧しました

    1. Spring Boot データ アクセスの概要

    Spring Data は、データベース アクセスを簡素化し、クラウドをサポートするように設計されたオープン ソース フレームワークです。 Spring が提供するサービス。これは、リレーショナル データベースおよび非リレーショナル データベース向けの多数のデータ アクセス ソリューションを含む包括的なプロジェクトであり、さまざまなデータ アクセス テクノロジを迅速かつ簡単に使用できるように設計されています。 Spring Boot はデフォルトで Spring Data を統合してデータアクセス層を統合する方式を採用しており、多数の自動設定の追加、各種データアクセステンプレート xxxTemplate と統一された Repository インターフェースの導入により、データアクセス層の操作を簡素化します。

    Spring Data は、複数の種類のデータベースのサポートを提供します。Spring Boot は、Spring Data によってサポートされるデータベースを統合および管理し、さまざまな依存関係スターターを提供します。 Spring Boot の一般的に使用されるデータベース依存関係スターターを表でリストできます。

    mybatis-spring -boot-starterMyBatis Startermybatis-plus-boot-starterMyBatis-Plus Starterspring-boot-starter-data-jpa##spring-boot starter-data-redisRedis Redis および Jedis クライアント用の Spring Data スターターを備えたキー値データ ストア spring-boot-starter-data-neo4jNeo4j グラフ データベースと Spring Data Neo4j スターターspring-boot-starter-data-mongodbMongoDB と Spring Data MongoDB スターター

    2. Spring Data JPA の概要

    #JPA (Java Persistence API、Javapersistence API) は、Sun によって正式に提案された Java 永続化仕様であり、Java 開発者にオブジェクト/リレーショナル マッピングを提供します ツールはリレーショナルを管理しますJava のデータ。その主な目的は、既存の永続化開発作業を簡素化し、ORM (オブジェクト リレーショナル マッピング、オブジェクト/リレーショナル マッピング) テクノロジを統合することです。 Spring Data は JPA 仕様に基づいてその利点を最大限に活用し、ORM リレーショナル データに対して永続化操作を実行する Spring Data JPA モジュールを提案します。

    Spring Data JPA は、ORM フレームワークと JPA 仕様に基づいて Spring によってカプセル化された JPA アプリケーション フレームワークのセットであり、追加、削除、変更、クエリなどの共通機能を提供し、開発者がデータ操作を実装できるようにします。コードが少なく、拡張も簡単です。 Spring Boot の JPA の統合を紹介する前に、Spring Data JPA の基本的な使い方を簡単に紹介します。

    2.1 ORM エンティティ クラスの作成

    Spring Data JPA フレームワークは ORM 関係を持つデータを操作するため、Spring Data JPA を使用する場合は、まずデータ テーブルとマッピングするエンティティ クラスを作成する必要があります。をクリックして、マッピング関係を構成します。

    @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()
    }
    ログイン後にコピー

    上記のコードに関して、Yi 兄弟が使用されているアノテーションについて簡単に説明します。

    注釈 @Entity を使用して、エンティティ クラスがデータベースにマップされていることを示します。このとき、データベース テーブルの名前は、デフォルトでクラス名の最初の文字が小文字になります。もちろん、name 属性を使用してマップされたテーブル名を指定することもできます。

    @ld: クラス属性またはゲッター メソッドにマークされ、特定の属性がテーブル内の主キーに対応することを示します。

    @GeneratedValue アノテーションは省略できます。これは @ld アノテーションと同じ位置にマークされ、属性に対応する主キー生成戦略を定義するために使用されます。 Spring Data JPA でサポートされる主キー生成戦略には、TABLE (主キーを保存するために特定のデータベース テーブルを使用する)、SEQUENCE (主キーの自動インクリメントをサポートしないデータベースの主キー生成戦略)、IDENTITY (主キーの自動インクリメントをサポートしないデータベースの主キー生成戦略) が含まれます。インクリメント) および AUTO (JPA はデフォルトのオプションである前方の 3 つの適切な戦略を独自に選択します)。

    クラス属性とテーブルのフィールド名が異なる場合、@Column アノテーションを name 属性と組み合わせて使用​​して、クラス属性に対応するテーブルのフィールド名を示すことができます。

    2.2 リポジトリ インターフェイスの書き込み

    さまざまなテーブル データ操作に対応するリポジトリ インターフェイスを書き込み、必要に応じて対応するデータ操作メソッドを書き込みます。

    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);
    }
    ログイン後にコピー

    リポジトリ インターフェイスを作成する際の特別な要件については、Yi 兄弟が皆さんに説明します。

    2.2.1 XXRepository インターフェイスの継承
    Spring Data JPA を使用して Repository インターフェイスをカスタマイズする場合、

    XXRepository インターフェイス 。ここで、 T は操作対象のエンティティ クラスを表し、 ID はエンティティ クラスの主キーのデータ型を表します。上記の例では、JpaRepository インターフェースを継承することを選択していますが、JpaRepository の継承構造は次の図に示されています。

    次に、JpaRepository インターフェースの継承構造に含まれるインターフェースについて説明します。

    (1) Repository は、Spring Data JPA が Repository インターフェースをカスタマイズするために提供する最上位の親インターフェースであり、このインターフェースではメソッドは宣言されていません。

    (2) CrudRepository インターフェイスは、Repository の継承インターフェイスの 1 つであり、いくつかの基本的な CRUD メソッドが含まれています。

    (3) PagingAndSortingRepository インターフェイスは CrudRepository インターフェイスを継承し、ページングと並べ替えの 2 つのメソッドを提供します。

    (4) QueryByExampleExecutor インターフェイスは、条件付きカプセル化クエリの最上位の親インターフェイスであり、複雑な条件付きクエリを Example インスタンスを通じて実行できるようにします。

    JpaRepository インターフェースは、PagingAndSortingRepository インターフェースと QueryByExampleExecutor インターフェースの両方を継承し、いくつかの追加のデータ操作メソッドを提供します。通常、カスタム リポジトリ インターフェイス ファイルを作成するときは、JpaRepository インターフェイスを継承することを直接選択します。

    2.2.2 複数のデータ操作方法
    Spring Data JPAをデータ操作に利用する場合、多くの実装方法がありますが、主な方法は以下のとおりです。

    (1). カスタム インターフェイスが JpaRepository インターフェイスを継承する場合、デフォルトで一般的に使用されるいくつかの CRUD メソッドが含まれます。

    (2). カスタム リポジトリ インターフェイスでは、SQL ステートメントで @Query アノテーションを使用して、データを確認、変更、削除できます。

    (3). カスタム リポジトリ インターフェイスでは、メソッド名のキーワードを直接使用してクエリ操作を実行できます。

    そのうち、Spring Data JPA でサポートされるメソッド名のキーワードと、対応する SQL フラグメントの説明を次の表に示します。

    2.2.3 @Transactional トランザクション管理
    カスタム リポジトリ インターフェイスでは、@Query アノテーションが使用されているかどうかに関係なく、データ変更操作 (変更、削除) は Add メソッド内にある必要があります。上記の @Transactional アノテーションはトランザクション管理用です。それ以外の場合は、プログラムの実行中に InvalidDataAccessApiUsageException が発生します。トランザクション管理のためにRepositoryインタフェースのメソッドを呼び出すビジネス層Serviceクラスに@Transactionalアノテーションが付加されている場合、Repositoryインタフェースファイルでは@Transactionalアノテーションを省略できます。

    2.2.4 @Moditying アノテーション
    カスタム リポジトリ インターフェイスでは、@Query アノテーションを使用してデータ変更操作 (変更、削除) を実行します。@Query アノテーションの使用に加えて、データの変更を示す @Moditying アノテーションも追加する必要があります。

    2.3.5 複雑な条件クエリ

    JPA は、複雑な条件クエリのサンプル インスタンスの使用もサポートしています。たとえば、JpaRepository インターフェースの既存の findAll(Example<S> var1) メソッドをクエリします。

    3. Spring Boot を使用して JPA を統合する

    Spring Boot を使用して JPA を統合する具体的な手順は以下のとおりです。

    3.1 Spring Data JPA 依存関係スターターの追加

    プロジェクトの pom.xml ファイルに Spring Data JPA 依存関係スターターを追加します。

    注:

    Spring Boot が Spring Data JPA のバージョン番号を一元管理しているため、Spring Data JPA に対応するバージョン番号を記載していません。

    3.2 ORM エンティティ クラスの記述

    操作を容易にするために、以前に作成したデータベース テーブル t_comment を例として、対応するエンティティ クラスを記述します。以前に作成した Comment クラスをコピーし、名前を に変更します。同時に、マッピング設定に JPA 対応のアノテーションを追加します。

    3.3 リポジトリ インターフェイスの作成

    データベース テーブル t_comment を操作するために、com.cy.repository パッケージの下にリポジトリ インターフェイス DiscussRepository を作成します。

    3.4 インターフェイス メソッド テスト用の単体テストを作成する

    Chapter03ApplcationTests テスト クラスを現在の場所にコピーし、名前を JpaTests に変更して、JPA 関連の単体テストを作成し、内容を少し変更します。 DiscussionRepositoryインターフェースに対応するメソッド。

    テスト メソッドは、JpaRepository のデフォルト メソッド、メソッド名のキーワード、@Query アノテーション、およびサンプルのカプセル化されたパラメーターを使用してデータ操作を実行します。

    3.5 統合テスト

    JpaTests テスト クラスで単体テスト メソッドを選択して、効果を実証します。

    #名前 説明
    Spring Data JPA および Hibernate スターター

    以上がSpringBoot が JPA フレームワークを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート