Javaを使用してデータにアクセスするには、多くの技術があります。 私には、そのうちのいくつかについて読んでいた:Javaでデータベースにアクセスするさまざまな方法
- JPQL
- HQL
- クライテリアAPI
- Querydsl
- jOOQ
- JaQu
- JDBC
- ActiveJDBC
今、私はオーバーヘッドのために本当に混乱しています。これらの技術の主な違いと類似点は何ですか?どちらが最も一般的に使用されていますか?短い比較は大歓迎です。
Javaを使用してデータにアクセスするには、多くの技術があります。 私には、そのうちのいくつかについて読んでいた:Javaでデータベースにアクセスするさまざまな方法
今、私はオーバーヘッドのために本当に混乱しています。これらの技術の主な違いと類似点は何ですか?どちらが最も一般的に使用されていますか?短い比較は大歓迎です。
Javaにおけるデータベースアクセスの基本的な基礎はJDBCです。データベースベンダーが標準的な方法でデータベースを公開できるようにするインタフェース(実装なし)であるため、Javaプログラマは異なるリレーショナルデータベースをサポートするためにコードを根本的に変更する必要はありません。
言い換えれば、それはSQLを受け入れ、SQLは標準であり、標準ではデータベース間の移植性を許さない非常に多くの種類があります。
残りのプラットフォームは、他のデータベースとの統合コストを軽減するために、JDBCをベースにしている傾向があります。データベースとやりとりできる方法の数はさまざまですが、基本的にはSQLコマンドの発行が改善されるか、または追加のライブラリが互換SQLコマンドの書き込みを引き継ぎます。
「データベースのようなもの」と「オブジェクトストレージ」の2つのカテゴリがあります。オブジェクトストレージはJavaオブジェクトの格納に重点を置いており、ライブラリはSQL生成の詳細のほとんどを処理します。
Technology /query language/type /notes
Java Persistance API /JPQL /object store/not an implementation, but an interface allowing multiple implementations, query language is not table specific, but object specific
Hibernate /HQL /object store/a popular Java solution, but tied to Hibernate only.
Java Persistance API /Criteria API /object store/Criteria API is the code (programming) equivalent to the JPQL strings.
Java Persistance API & JDO/QueryDSL API /object store/Java API to build queries similar to Criteria API, but different
JDBC /jOOQ /direct JDBC/Java API that replaces SQL strings construction with method calls that are table centric
H2 database /JaQu /object store/Linked directly to one database, non-portable. Follows Microsoft LINQ syntax.
JDBC /ActiveJDBC /object store/Looks like a branded version of almost-JPA for webapps.
このスペースに2つの基本的なAPIを使用すると、唯一のリレーショナルデータベースをサポートしようとしている場合、JDOのサブセットを使用すると、JPAで使用するJDBCやJDO、です。 JDBCもJDOもデータベース接続を直接提供するものではなく、純粋なAPIです。つまり、多くのデータベースベンダーが、これらのテクノロジを活用していないAPIをプッシュすると、JDBCとJPAに基づいていない技術は使用しないことをお勧めします。
また、複数の実装を活用するには、JPQL(文字列でクエリを作成する場合)またはCriteriaAPI(コードでクエリを作成する場合)の両方を使用しないクエリ言語を使用することをお勧めします。 JPAの概念的な要素です。 JDBCを直接使用している場合は、発行されたすべてのSQLに対してPreparedStatementsを使用し、純粋なJDBCソリューションで既存のSQLコードベースを活用することは可能ですが、リレーショナル・データベースをJavaにマッピングする際に、既存のデータベース・コードベースがほとんど処理していないコーナー・ケースがたくさんあるため、JPAを使用します。
JDBCコードを記述しないでください。 あなたはMyBatisやHibernateよりも優れた仕事をすることはありません。
代わりに、MyBatisまたはHibernateのいずれかを学習して使用してください。
MyBatisはよりシンプルです(必要なものにはおそらく十分です)。Hibernateには何百万もの機能があります。
これはディスカッションフォーラムではなく、特定のプログラミングに関する質問です。これに対する答えは、ほとんどいつも解説されていて、ここでもぼやけています。 – csmckelvey
これらの技術がどのように関連しているか理解したいだけです。個人的な意見は、この質問の目的ではありません –
@ takendarkk私はあなたがGoogleの "Java SQLクエリ"とJDBC/JDOの歴史に多くの露出を持っていないときに起こる開始する場所を知らないの混乱としてそれを参照してください/ JPAはSQLクエリアプローチ/ Fluent Query APIよりも優れています。 –