1. ホーム
  2. java

[解決済み] JPAとJDBC、どう違うの?

2022-05-10 16:07:26

質問

私はJava EEを学んでおり、同じようにeclipse with glassfishをダウンロードしました。いくつかの例を見、また、Java EE 5 についてすべてを知るために Oracle のドキュメントを読みました。データベースへの接続は非常に簡単でした。私は動的なWebプロジェクトを開き、セッションEJBを作成し、私はEntityManagerを使用し、取得メソッドを使用して格納されたデータテーブルにアクセスすることができました。

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

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

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

どのように解決するのですか?

平たく言えば

  • JDBC はデータベース アクセスのための標準規格です。
  • JPAはORMの標準規格です。

JDBCはDBに直接接続し、それに対してSQLを実行するための標準規格です - 例) SELECT * FROM USERS などです。 アプリで扱えるデータセットが返され、以下のような通常の操作が可能です。 INSERT , DELETE ストアドプロシージャを実行する、など。 ほとんどのJavaデータベースアクセス(JPAプロバイダを含む)の基礎技術の1つです。

従来の JDBC アプリの問題の 1 つは、データセットとオブジェクトの間のマッピングが多く発生し、ロジックが SQL と混在しているなど、くだらないコードがしばしば発生することです。

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

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

裏を返せば、Hibernateや他のほとんどのJPA用プロバイダはSQLを書き、JDBCを使ってDBからの読み込みやDBへの書き込みを行うのです。