どのデータベースが使用されているかにかかわらず、データベースで動作するJavaコードを記述したいと思います。私の問題は、オブジェクト関連ではないということです。いくつかの挿入とクエリがありますが、ほとんどはそうではありません。データベースレイヤーnon-ORM(Java)
今はPostgreSQLとpure JDBCを使用していますが、Oracleと連携させる必要があるかもしれません。
(私が一度も使用していない)Hibernateは私の問題を解決することができますか?
どのデータベースが使用されているかにかかわらず、データベースで動作するJavaコードを記述したいと思います。私の問題は、オブジェクト関連ではないということです。いくつかの挿入とクエリがありますが、ほとんどはそうではありません。データベースレイヤーnon-ORM(Java)
今はPostgreSQLとpure JDBCを使用していますが、Oracleと連携させる必要があるかもしれません。
(私が一度も使用していない)Hibernateは私の問題を解決することができますか?
私はjOOQを正確に作成しました。 jOOQはSQL自体をJavaのdomain-specific languageとしてモデル化しています。これは、組み込み関数、ウィンドウ関数、ストアドプロシージャ、階層クエリなど、標準およびベンダー固有の機能を使用しています。可能な限り、あるデータベースのベンダー固有の機能が他のデータベースに対してシミュレートされます。そうすれば、jOOQで生成されたSQLのほとんどは、サポートされている13のデータベースのいずれかと互換性があります。
独自のSQLを書く際の問題は、RDBMS用に手動で最適化する必要があることです。一部のRDBMSでは、さまざまなSQL構文がサポートされています。
したがって、ORMベースのソリューションに切り替える際のオーバーヘッドとのバランスを取る必要があります。または、SQLが100%標準であることを確認して、1つのRDBMSソリューションで動作する構造体を使用せず、別の構造体では使用しない構造体を使用しないでください。
特定の状況では、ORMを使用するために永続性レイヤー全体を再加工するよりも、おそらくsqlを修正するほうが簡単でしょう。場合によっては、あなたが知っているツールが最良のツールです。現在のアプリケーションに簡潔なモデルレイヤーがない場合、ORMに切り替えると多くの作業が必要になります。もちろん、hibernateを使用して、厳しいsqlクエリを使用することもできますが、データをモデル化しない場合はどうなりますか?
多くの統合テストで、すべての永続性の懸念事項が1つのDAOレイヤーにあることを念頭に置いて、RDBMSの切り替え時に何が壊れているかを素早く特定できます。永続性に重点を置く統合テストがない場合は、今すぐ書き始めるべきです。
Javaの標準はJPAであり、非常に強力です。 Hibernateは、JPAプロバイダとしての業界標準です。
JPAは、クリーンな持続層を作成するのに役立ちます。コンパイル時に検証されるので、中断しないことが確実なクエリを書くことができます。私はこのために春を使いたい、単体テストにはとても簡単です。しかしCDIは私が信じているものと同じものを提供しています。
テストクラスも簡単に作成できます。以前は私を教えてくれた同僚として、モデルはあなたが持っている最も重要なものです。あなたはそれが壊れないようにしたり、問題を抱えたりしたくありません。
JPAを使用すると、使用するデータベースのエンティティからスキーマを生成することもできます。経験から、それはまた非常に良いです。
JPAは、優れたプラクティスを実践するのに役立ちます。それは多くの価値があります。
@hvgotcodesに関して、はい、あなたはコストに注意する必要がありますが、jdbcとjpaを混在させることもできます。それはダオのためのものです。
Hibernateの問題は、オブジェクトモデルのようなリレーショナルデータベースをモデル化する必要があることです。場合によっては、既存のデータベースでの作業が困難になることがあります。したがって、リレーショナルデータベースに依存します。
他のフレームワーク(JPAではありません)はIbatisです。このフレームワークを見てみてください。
私は@ unludoのJPA回答が好きですが、私はいくつかの詳細を追加すると思いました。
定義した持続性インターフェイスを使用するようにコードを変更することをお勧めします。
public interface DataPersister {
public void saveFoo(Foo foo);
public void findFooById(int id);
...
}
インターフェイスの最初の実装では、JDBC/Postgresqlが使用されます。カバーの下にJPAを使用したい場合は、うまくカバーしてください。または、SQLデータベースやフラットファイルに切り替える場合は、うまくいきます。
データの使用と永続化の実装の間で独自のコードを分離したら、別のPersisterに切り替えるほうがはるかに簡単です。テストのためにH2のような安価なデータベースを使用し、近い将来に新しいデータベースに移行する間に本番環境でPostgreSQLに切り替えることができます。
これが役に立ちます。
これは私がそれを行うだろう正確にどのようである:
もここで、この関連の質問を参照してください。私はCRMシステムをJDBCからHibernateに移植しました。私はそれを本番環境に移行させるためにいくつかのネイティブクエリが必要であることを発見しました。 –
私は(私は持っていなかった)時間の欠如のために私はインターフェイスでこれを実装していない。はい、私はDAOレイヤをpoutしますが、インターフェイスはありません。私はできるだけ早くそれをやります。 – lcguida
これは私が探していたものです。ありがとう!私は次の日にそれを勉強するつもりです。 – lcguida