148

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

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

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

JDBCに関連するJPAと永続性をどのように理解しますか?JPAは何を考えていましたか?set / getメソッドがあるのはなぜですか?誰かがこれら2つの本質に光を当てることができますか?「専門用語」のない長所/短所は何ですか?また、いくつかのリンクを提案してください。JPAとJDBCの違いをグーグルで簡単に検索すると、フォローできない「用語」でいっぱいのサイトにたどり着きました:(

4

4 に答える 4

301

素人の言葉で:

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

JDBC は、DB に直接接続し、それに対して SQL を実行するための標準です。SELECT * FROM USERSたとえば、.これは、ほとんどの Java データベース アクセス (JPA プロバイダーを含む) の背後にある基盤となるテクノロジの 1 つです。INSERTDELETE

従来の JDBC アプリの問題の 1 つは、データ セットとオブジェクトの間で多くのマッピングが発生したり、ロジックが SQL と混合されたりするような不適切なコードを作成できることです。

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

他の例には、OpenJPA、toplink などがあります。

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

于 2012-08-09T10:49:26.007 に答える
69

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

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

于 2012-08-09T10:46:06.227 に答える
26

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

ここで、JDBC を理解して使用するには、SQL についてある程度理解し、実用的な知識を持っていることが不可欠です。それに伴い、リレーショナル データベースとは何か、それをどのように操作するか、テーブル、列、キー、関係などの概念についても必要な洞察が得られます。少なくともデータベース、SQL、およびデータ モデリングの基本的な理解がなければ、JDBC を十分に活用することはできません。JDBC は、実際にはこれらのものの上にある薄い抽象化に過ぎないからです。

于 2012-08-09T10:52:56.230 に答える
13

JDBC は JPA の前身です。

JDBC は、Java の世界とデータベースの世界をつなぐ架け橋です。JDBC では、テーブル名、列名など、CRUD 操作に必要なすべてのダーティな詳細を公開する必要がありますが、JPA (下で JDBC を使用している) では、データベース メタデータの詳細も指定しますが、Java アノテーションを使用します。

そのため、JPA は更新クエリを作成し、検索または作成/更新したエンティティを管理します (それ以上のことも行います)。

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

于 2012-08-09T10:50:02.183 に答える