1. Spring Boot データ アクセスの概要
Spring Data は、データベース アクセスを簡素化し、クラウドをサポートするように設計されたオープン ソース フレームワークです。 Spring が提供するサービス。これは、リレーショナル データベースおよび非リレーショナル データベース向けの多数のデータ アクセス ソリューションを含む包括的なプロジェクトであり、さまざまなデータ アクセス テクノロジを迅速かつ簡単に使用できるように設計されています。 Spring Boot はデフォルトで Spring Data を統合してデータアクセス層を統合する方式を採用しており、多数の自動設定の追加、各種データアクセステンプレート xxxTemplate と統一された Repository インターフェースの導入により、データアクセス層の操作を簡素化します。
Spring Data は、複数の種類のデータベースのサポートを提供します。Spring Boot は、Spring Data によってサポートされるデータベースを統合および管理し、さまざまな依存関係スターターを提供します。 Spring Boot の一般的に使用されるデータベース依存関係スターターを表でリストできます。
#名前
|
説明
|
mybatis-spring -boot-starter | MyBatis Starter |
mybatis-plus-boot-starter | MyBatis-Plus Starter |
spring-boot-starter-data-jpa
Spring Data JPA および Hibernate スターター |
| ##spring-boot starter-data-redis
Redis Redis および Jedis クライアント用の Spring Data スターターを備えたキー値データ ストア |
| spring-boot-starter-data-neo4j
Neo4j グラフ データベースと Spring Data Neo4j スターター |
| spring-boot-starter-data-mongodb
MongoDB と 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 テスト クラスで単体テスト メソッドを選択して、効果を実証します。
以上がSpringBoot が JPA フレームワークを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。