1. 概要

このチュートリアルでは、 Javaデータベース接続(JDBC)APIJava Persistence API(JPA)の違いを見ていきます。

2. JDBCとは

JDBCは、データベースと通信するJavaアプリケーション用のプログラミングレベルのインターフェイスです。 アプリケーションはこのAPIを使用してJDBCマネージャーと通信します。 これは、アプリケーションコードがデータベースとの通信に使用する一般的なAPIです。 API以外にも、使用しているデータベース用のベンダー提供のJDBC準拠ドライバーがあります。

3. JPAとは

JPAはJava標準であり、Javaオブジェクトをリレーショナルデータベースのレコードにバインドできます。これは、オブジェクトリレーションシップマッピング(ORM)への1つの可能なアプローチであり、開発者が取得、保存、更新できるようにします。 、Javaオブジェクトを使用してリレーショナルデータベースのデータを削除します。 JPA仕様には、いくつかの実装が用意されています。

4. JPAとJDBC

バックエンドデータベースシステムとの通信方法を決定する場合、ソフトウェアアーキテクトは重大な技術的課題に直面します。 2つのデータベーステクノロジは永続データを処理するために非常に異なるアプローチを採用しているため、JPAとJDBCの間の議論が決定的な要因になることがよくあります。 それらの主な違いを分析してみましょう。

4.1. データベースの相互作用

JDBCを使用すると、SQLコマンドを記述して、リレーショナルデータベースからデータを読み取り、リレーショナルデータベースにデータを更新できます。 JPAは、JDBCとは異なり、開発者がオブジェクト指向セマンティクスを利用してデータベース駆動型Javaプログラムを構築できるようにします。。 JPAアノテーション 特定のJavaクラスとその変数がデータベース内の特定のテーブルとその列にどのようにマップされるかを記述します.

Employeeクラスをemployeeデータベーステーブルにマップする方法を見てみましょう。

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
    @Column(name = "employee_name")
    private String employeeName;
}

次に、JPAフレームワークは、オブジェクト指向Javaコードとバックエンドデータベース間の変換に必要な、時間のかかるエラーが発生しやすいコーディングをすべて処理します。

4.2. アソシエーションの管理

クエリ内のデータベーステーブルをJDBCに関連付ける場合は、完全なSQLクエリを書き出す必要がありますが、 JPAを使用する場合は、アノテーションを使用して1対1、1対多、多対1を作成します。 、および多対多の関連付け

employeeテーブルがcommunicationテーブルと1対多の関係にあるとしましょう。

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
 
    @OneToMany(mappedBy = "employee", fetch = FetchType.EAGER)
    @OrderBy("firstName asc")
    private Set communications;
}

この関係の所有者はCommunicationであるため、EmployeemappedBy属性を使用して双方向の関係にします。

4.3. データベースの依存関係

JDBCはデータベースに依存します。つまり、異なるスクリプトが必要です。 書かれるさまざまなデータベース用一方、JPAはデータベースに依存しないため、同じコードで変更がほとんどない(またはまったくない)さまざまなデータベースで使用できます

4.4. 例外処理

JDBCはSQLExceptionなどのチェックされた例外をスローするため、 try-catchブロックに書き込む必要があります。 一方、JPAフレームワークは、Hibernateのようなチェックされていない例外のみを使用します。 したがって、使用しているすべての場所でそれらをキャッチまたは宣言する必要はありません。

4.5. パフォーマンス

JPAとJDBCの違いは、基本的に誰がコーディングを行うか、つまりJPAフレームワークまたはローカル開発者です。 いずれにせよ、オブジェクト関係インピーダンスの不一致に対処する必要があります。

公平を期すために、SQLクエリを誤って記述すると、JDBCのパフォーマンスが大幅に低下する可能性があります。 2つのテクノロジーのどちらを使用するかを決定する際に、パフォーマンスが問題になることはありません。 プロの開発者は、使用するテクノロジーに関係なく、同等に動作するJavaアプリケーションを作成する能力を超えています。

4.6. JDBCの依存関係

JPAベースのアプリケーションは、引き続き内部でJDBCを使用します。 したがって、JPAを使用する場合、コードは実際にはすべてのデータベース操作にJDBCAPIを使用しています。 言い換えると、 JPAは、開発者から低レベルのJDBC呼び出しを隠す抽象化レイヤーとして機能し、データベースプログラミングを大幅に容易にします

4.7. トランザクション管理

JDBCでは、トランザクション管理はコミットとロールバックを使用して明示的に処理されます。 一方、トランザクション管理はJPAで暗黙的に提供されます。

5. 長所と短所

JPAに対するJDBCの最も明らかな利点は、理解が簡単なことです一方、開発者がJPAフレームワークの内部動作やデータベース設計を理解していないと、優れたコードを記述できなくなります。.

また、 JPAは、多くの開発者によるより洗練されたアプリケーションにより適していると考えられています。 ただし、アプリケーションが単純なデータベースを使用し、それを別のデータベースベンダーに移行する予定がない場合は、 JDBC推奨される代替手段と見なされます

開発者にとってのJDBCに対するJPAの主な利点は、データベースのセマンティクスを気にすることなく、オブジェクト指向の原則とベストプラクティスを使用してJavaアプリケーションをコーディングできることです。 その結果、特にソフトウェア開発者がSQLとリレーショナルデータベースをしっかりと理解していない場合、開発をより迅速に完了することができます。

また、十分にテストされた堅牢なフレームワークがデータベースとJavaアプリケーション間の相互作用を処理しているため、JPAを使用すると、データベースマッピングレイヤーからのエラーが減少するはずです。

6. 結論

このクイックチュートリアルでは、JPAとJDBCの主な違いについて説明しました。

JPAには多くの利点がありますが、JPAが現在のアプリケーション要件に対して最適に機能しない場合は、他にも多くの高品質の代替手段を使用できます。