web-dev-qa-db-ja.com

JPAまたはJDBC、どのように違いますか?

私はJava EEを学習しており、同じためにGlassfishを使用してEclipseをダウンロードしました。いくつかの例を見て、Oracleのドキュメントを読んでJava EE 5についてすべてを理解しました。データベースへの接続は非常に簡単でした。動的Webプロジェクトを開き、セッションEJBを作成し、EntityManagerを使用し、getメソッドで保存されたデータテーブルにアクセスできました。

次のプロジェクトでは、単純なクラスを作成してから、DBテーブルにアクセスしました。私が最初に遭遇した問題は、PersistenceUnit属性がEJB、Servletなどによってのみ認識され、単純なJavaクラスでは認識されないことでした。したがって、EntityManagerの方法を使用できませんでした(または、できますか?)

私は「JDBC」の方法で行くように頼まれました。最初に遭遇した問題は、DBへの接続を取得することでした。これはすべてハードコーディングする必要があるようです。データベース接続を簡単に構成できるpersistence.xmlがありました。 DB用のドライバーを設定することさえ簡単でした。また、テーブルエンティティにアクセスするためのJDBCにはget/setメソッドがありません。

JDBCに関連してJPAと永続性を理解するにはどうすればよいですか? JPAは何のために考えられましたか? set/getメソッドがあるのはなぜですか?誰かがこれら2つの本質に光を当てることができますか?「専門用語」のない賛否両論は何ですか??また、いくつかのリンクを提案してください。 JPAとJDBCの違いを簡単にGoogleで検索した結果、いくつかのサイトにたどり着き、「用語」をたどることができませんでした:(

100
user907810

素人の言葉で:

  • JDBCはデータベースアクセスの標準です
  • JPAはORMの標準です

JDBCは、DBに直接接続し、それに対してSQLを実行するための標準です。たとえば、SELECT * FROM USERSなどです。アプリで処理できるデータセットを返すことができます。また、INSERTDELETE、ストアドプロシージャなどを実行します。ほとんどのJavaデータベースアクセス(JPAプロバイダーを含む)の背後にある基盤技術の1つです。

従来のJDBCアプリの問題の1つは、多くの場合、データセットとオブジェクト間のマッピングの多くが発生したり、SQLにロジックが混在したりする、安っぽいコードを使用できることです。

JPAは、オブジェクトリレーショナルマッピングの標準です。これは、コード内のオブジェクトとデータベーステーブルをマッピングできるテクノロジーです。これにより、開発者からSQLを「隠す」ことができ、処理するすべてのクラスはJavaクラスになり、プロバイダーはそれらを保存して魔法のようにロードすることができます。ほとんどの場合、XMLマッピングファイルまたはゲッターとセッターの注釈を使用して、オブジェクトのどのフィールドがDBのどのフィールドにマッピングされるかをJPAプロバイダーに伝えることができます。最も有名なJPAプロバイダーは Hibernate であるため、具体的な例を始めるのに適した場所です。

他の例には、OpenJPA、toplinkなどが含まれます。

内部では、HibernateおよびJPAのその他のほとんどのプロバイダーはSQLを記述し、JDBCを使用してDBとの間で読み書きを行います。

191
Mark D

JPAとJDBCの主な違いは、抽象化のレベルです。

JDBCは、データベースとの対話のための低レベルの標準です。 JPAは、同じ目的のためのより高いレベルの標準です。 JPAを使用すると、アプリケーションでオブジェクトモデルを使用できるため、作業がはるかに楽になります。 JDBCを使用すると、データベースでより多くのことを直接行うことができますが、より注意が必要です。一部のタスクはJPAを使用して効率的に解決できませんが、JDBCを使用するとより効率的に解決できます。

46
gkuzmin

JDBCは、JPAよりもはるかに低レベル(かつ古い)の仕様です。必要不可欠な点では、JDBCは、純粋なSQLを使用してデータベースと対話するためのAPIです-クエリを送信し、結果を取得します。オブジェクトや階層の概念はありません。 JDBCを使用する場合、結果セット(基本的に、SQLクエリによって返される1つ以上のデータベーステーブルからの値の行/列マトリックス)をJavaオブジェクトに変換するのはあなた次第です。

ここで、JDBCを理解して使用するには、SQLについての理解と実用的な知識が不可欠です。また、リレーショナルデータベースとは何か、その操作方法、およびテーブル、列、キー、リレーションシップなどの概念に関する洞察が必要になります。少なくともデータベース、SQL、およびデータモデリングの基本的な理解がない限り、JDBCは実際にはこれらの事柄の単なる抽象化にすぎないため、JDBCをあまり利用することはできません。

17
pap

JDBCはJPAの前身です。

JDBCは、Javaの世界とデータベースの世界の間のブリッジです。 JDBCでは、テーブル名、列名など、CRUD操作に必要なすべてのダーティな詳細を公開する必要がありますが、JPA(下でJDBCを使用している)では、データベースメタデータの詳細も指定しますが、Java注釈。

そのため、JPAは更新クエリを作成し、検索または作成/更新したエンティティを管理します(さらに多くのことを行います)。

Java EEコンテナなしでJPAを実行する場合は、Springとそのライブラリをまったく同じJavaアノテーションで使用できます。

9
Pawel Solarski