JPAとは何ですか?
スプリングブート JPA を管理するための Java 仕様です。 関連した Java アプリケーション内のデータ。これにより、Java オブジェクト/クラスとリレーショナル データベースの間でデータにアクセスし、データを保持できるようになります。 JPAが続きます オブジェクトとリレーションシップのマッピング (ORM)。インターフェースのセットです。ランタイムも提供します エンティティマネージャー データベースに対するオブジェクトのクエリとトランザクションを処理するための API。プラットフォームに依存しないオブジェクト指向クエリ言語 JPQL (Java Persistent Query Language) を使用します。
永続性のコンテキストでは、次の 3 つの領域がカバーされます。
Java 置換オール
- Java 永続性 API
- API 自体は、 持続性 パッケージ
JPA はフレームワークではありません。あらゆるフレームワークで実装できる概念を定義します。
JPA を使用する必要があるのはなぜですか?
JPA は、JDBC、SQL、および手書きのマッピングよりもシンプルでクリーンで、労力がかかりません。 JPA は、パフォーマンス指向ではない複雑なアプリケーションに適しています。 JDBC に対する JPA の主な利点は、JPA ではデータがオブジェクトとクラスで表されるのに対し、JDBC ではデータがテーブルとレコードで表されることです。 POJO を使用して永続データを表現し、データベース プログラミングを簡素化します。 JPA には他にもいくつかの利点があります。
- JPA は、データベース固有の SQL 言語で DDL を記述することを回避します。この代わりに、XML または Java アノテーションを使用したマッピングが可能になります。
- JPA を使用すると、データベース固有の SQL 言語で DML を記述することを回避できます。
- JPA を使用すると、DML 言語をまったく使用せずに Java オブジェクトとグラフを保存およびロードできます。
- JPQL でクエリを実行する必要がある場合、(ネイティブの) SQL テーブルと列ではなく、Java エンティティの観点からクエリを表現できます。
JPAの機能
JPAには以下のような特徴があります。
- これは強力なリポジトリとカスタムです オブジェクトマッピングの抽象化。
- をサポートします ストア間の永続性 。これは、エンティティを部分的に MySQL および Neo4j (Graph Database Management System) に保存できることを意味します。
- クエリメソッド名から動的にクエリを生成します。
- ドメインの基本クラスは、基本的なプロパティを提供します。
- 透過的な監査をサポートします。
- カスタム リポジトリ コードを統合する可能性。
- カスタム名前空間を使用すると、Spring Framework と簡単に統合できます。
JPAアーキテクチャ
JPA は、ビジネス エンティティをリレーショナル エンティティとして保存するソースです。 POJOをエンティティとして定義する方法と、エンティティを関係付けて管理する方法を示します。
次の図は、JPA のクラスレベルのアーキテクチャを示しています。ここでは、 Javaxの永続性 パッケージ。 JPA アーキテクチャには次のユニットが含まれています。
JPAクラスの関係
上で説明したクラスとインターフェイスは関係を維持します。次の図は、クラスとインターフェイスの関係を示しています。
- EntityManager と EntiyTransaction の関係は次のとおりです。 一対一 。 EntityManager 操作ごとに EntityTransaction インスタンスがあります。
- EntityManageFactory と EntiyManager の関係は次のとおりです。 1対多 。 EntityManagerインスタンスに対するファクトリクラスです。
- EntityManager と Query の関係は次のとおりです。 1対多 。 EntityManager クラスのインスタンスを使用して、任意の数のクエリを実行できます。
- EntityManager と Entity の関係は次のとおりです。 1対多 。 EntityManager インスタンスは複数の Entity を管理できます。
JPAの実装
JPA はオープンソース API です。 Eclipse、RedHat、Oracleなど、さまざまなエンタープライズベンダーがJPAを追加して新しい製品を提供しています。以下のような人気のある JPA 実装フレームワークがいくつかあります。 Hibernate、EclipseLink、DataNucleus、 などとしても知られています。 オブジェクトとリレーションシップのマッピング (ORM) ツール。
オブジェクト関係マッピング (ORM)
ORM では、Java オブジェクトからデータベース テーブルへのマッピング、またはその逆のマッピングを といいます。 オブジェクト リレーショナル マッピング。 ORM マッピングは、 リレーショナルデータベース (テーブルとレコード) および Javaアプリケーション (クラスとオブジェクト)。
次の図では、ORM 層がアダプター層です。オブジェクト グラフの言語を SQL およびリレーション テーブルの言語に適合させます。
ORM 層はアプリケーションとデータベースの間に存在します。 Java クラスとオブジェクトを変換して、リレーショナル データベースに保存および管理できるようにします。デフォルトでは、保持される名前がテーブルの名前になり、フィールドが列になります。アプリケーションがセットアップされると、テーブルの各行がオブジェクトに対応します。
JPAのバージョン
EJB の以前のバージョンでは、次を使用してビジネス ロジック層と組み合わせた永続化層を定義しています。 javax.ejb.EntityBean インターフェース。 EJB 仕様には JPA の定義が含まれています。
EJB 3.0 の導入中に、永続層が分離され、JPA 1.0 (Java Persistence API) として指定されました。この API の仕様は、JAVA EE5 の仕様とともに、JSR 220 を使用して 2006 年 5 月 11 日にリリースされました。
2019年にJPAは ジャカルタの永続性 。 JPAの最新バージョンは、 2.2 。次の機能をサポートしています。
- Java 8、日時 API
- AttributeConvertes での CDI インジェクション
- 注釈を @Repeatable に作成します
JPAとHibernateの違い
JPA: JPA は、Java オブジェクトとリレーショナル データベース間のデータへのアクセス、管理、および永続化に使用される Java 仕様です。これは ORM の標準的なアプローチです。
休止状態: これは、リレーショナル データベース システムに Java オブジェクトを格納するために使用される軽量のオープンソース ORM ツールです。 JPAのプロバイダです。これは、JPA が提供する一般的なアプローチに従います。
次の表では、JPA と Hibernate の違いを説明します。
JPA | 休止状態 |
---|---|
JPAは、 Javaの仕様 Java アプリケーションのマッピング関係データ用。 | ハイバネートとは、 ORMフレームワーク データの永続性を扱います。 |
JPA は実装クラスを提供しません。 | 実装クラスを提供します。 |
と呼ばれるプラットフォームに依存しないクエリ言語を使用します。 JPQL (Java 永続クエリ言語)。 | と呼ばれる独自のクエリ言語を使用します。 本社 (Hibernate クエリ言語)。 |
で定義されています javax.persistence パッケージ。 | で定義されています 組織の休止状態 パッケージ。 |
などのさまざまな ORM ツールに実装されています。 休止状態、EclipseLink、 等 | ハイバネートとは、 プロバイダー PSDの。 |
JPAが使用する エンティティマネージャー データの永続化を処理するため。 | Hibernate での使用 セッション データの永続化を処理するため。 |
Spring Boot スターター データ JPA
Spring Boot はスターター依存関係を提供します スプリングブートスターターデータjpa Spring Boot アプリケーションをリレーショナル データベースに効率的に接続します。 spring-boot-starter-data-jpa は内部で spring-boot-jpa 依存関係を使用します。
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE
Spring Boot JPA の例
JPA を使用してデータベースに接続する Spring Boot アプリケーションを作成してみましょう。次の例では、インメモリ データベースを使用しています。 アパッチダービー。
C++で文字列を分割する
アパッチダービー: それは オープンソース、組み込み 完全に Java で実装されたリレーショナル データベース。 Apache License 2.0 に基づいて利用できます。 Apache Derby には次の利点があります。
- インストール、展開、使用は簡単です。
- これは、Java、JDBC、および SQL 標準に基づいています。
- これは、Java ベースのソリューションに Derby を埋め込むことを可能にする組み込み JDBC ドライバーを提供します。
- また、Derby Network Client JDBC ドライバーと Derby Network Server を使用したクライアント/サーバー モードもサポートします。
Spring Boot は、次のような組み込みデータベースを自動構成できます。 H2、HSQL、 そして ダービーデータベース 。接続 URL を指定する必要はありません。使用する組み込みデータベースへのビルド依存関係を含める必要があるだけです。
Spring Boot では、追加するだけで Apache Derby データベースを簡単に統合できます。 ダービー pom.xml ファイル内の依存関係。
org.apache.derby derby runtime
ステップ1: Spring Initializr を開く https://start.spring.io/ 。
ステップ2: Spring Boot の最新バージョンを選択します 2.3.0(スナップショット)
ステップ 3: を提供します。 グループ 名前。私たちが提供したのは、 com.javatpoint。
ステップ 4: を提供します。 アーティファクト 同上。私たちが提供したのは、 Apache-ダービーの例 。
ステップ5: 依存関係を追加します。 Spring Web、Spring Data JPA、 そして Apache ダービー データベース 。
ステップ6: クリックしてください 生成する ボタン。 「生成」ボタンをクリックすると、プロジェクトが Jar ファイルにラップされ、ローカル システムにダウンロードされます。
ステップ 7: 抽出 Jar ファイルを選択し、STS ワークスペースに貼り付けます。
ステップ 8: インポート プロジェクトフォルダーをSTSにコピーします。
ファイル -> インポート -> 既存の Maven プロジェクト -> 参照 -> フォルダー apache-derby-example を選択 -> 完了
インポートには時間がかかります。
ステップ9: という名前のパッケージを作成します。 com.javatpoint.model フォルダ内に src/メイン/java。
ステップ 10: という名前のクラスを作成します ユーザーレコード パッケージの中に com.javatpoint.model そして次のことを実行します。
- 3 つの変数を定義する ID、名前、 そして Eメール 。
- ゲッターとセッターを生成します。
ファイルを右クリック -> ソース -> ゲッターとセッターの生成 - デフォルトのコンストラクターを定義します。
- クラスを次のようにマークします 実在物 注釈を使用して @実在物。
- マーク ID アノテーションを使用して主キーとして @ID。
ユーザーレコード.java
package com.javatpoint.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
ステップ 11: という名前のパッケージを作成します。 com.javatpoint.controller フォルダ内に src/メイン/java。
ステップ 12: という名前でコントローラークラスを作成します。 ユーザーコントローラー パッケージの中に com.javatpoint.controller そして次のことを実行します。
- アノテーションを使用してクラスをコントローラーとしてマークします @RestController。
- クラスを自動配線しました ユーザーサービス 注釈を使用して @Autowired 。
- 2 つのマッピングを定義しました。1 つは すべてのユーザーを取得する そしてもう一つは ユーザーを追加する。
ユーザーコントローラー.java
package com.javatpoint.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.javatpoint.model.UserRecord; import com.javatpoint.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping('/') public List getAllUser() { return userService.getAllUsers(); } @RequestMapping(value='/add-user', method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } }
ステップ 13: という名前のパッケージを作成します。 com.javatpoint.service フォルダ内に src/メイン/java。
ステップ 14: 次の名前で Service クラスを作成します。 ユーザーサービス パッケージの中に com.javatpoint.service そして次のことを実行します。
- アノテーションを使用してクラスをサービスとしてマークします @サービス。
- を自動配線しました ユーザーリポジトリ
- メソッドを定義する getAllUsers() のリストを返す
- 別のメソッド名を定義する ユーザーを追加する() ユーザーレコードを保存します。
ユーザーサービス.java
package com.javatpoint.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javatpoint.model.UserRecord; import com.javatpoint.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { ListuserRecords = new ArrayList(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } }
ステップ 15: という名前のパッケージを作成します。 com.javatpoint.リポジトリ フォルダ内に src/メイン/java。
ステップ 16: 次の名前でリポジトリ インターフェイスを作成します。 ユーザーリポジトリ パッケージの中に com.javatpoint.リポジトリ そして伸びる Crudリポジトリ 。
隠れたアプリを明らかにする方法
ユーザーリポジトリ.java
package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { }
ステップ 17: さて、開いてください ApacheDerbyExampleApplication.java ファイル。アプリケーションをセットアップするときにデフォルトで作成されます。
ApacheDerbyExampleApplication.java
package com.javatpoint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } }
これで、要件に従って必要なクラスとパッケージがすべてセットアップされました。何も提供していないことに注意してください 接続URL データベース用。上記の手順をすべて完了すると、プロジェクト ディレクトリは次のようになります。
アプリケーションを実行してみましょう。
ステップ 18: を開きます ApacheDerbyExampleApplication.java ファイルを作成し、Java アプリケーションとして実行します。
ステップ 19: ブラウザを開いて、URL http://localhost:8080/ を呼び出します。リストにユーザーを追加していないため、空のリストが返されます。
データベースにユーザーを追加するには、 役職 を使用してリクエストする 郵便屋さん 。
ステップ 20: を開きます 郵便屋さん そして次のことを実行します。
- を選択 役職
- URL http://localhost:8080/add-user を呼び出します。
- クリックしてください 体
- コンテンツタイプを次のように選択します JSON (アプリケーション/json)。
- データベースに挿入したいデータを挿入します。次のデータを挿入しました。
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- クリックしてください 送信 ボタン。
[送信]ボタンをクリックすると、次のように表示されます ステータス:200 OK 。これは、リクエストが正常に実行されたことを意味します。
ステップ21: ブラウザを開いて、URL http://localhost:8080 を呼び出します。データベースに挿入したユーザーを返します。
Apache derby サンプル プロジェクトをダウンロード