0

次の問題があります。プログラムが実行されるデータベースがいくつかあるため、コンパイル時に正確なデータベース構造が不明になります。現在、クエリオブジェクトを作成できるライブラリを探しています。このライブラリは、複数のSQL方言に変換でき、プレーンなクエリ文字列を提供します。

Hibernateなどの通常のORMライブラリに似たものを検索します。それらのいくつかを調べましたが、コンパイル時に通常のjavaクラスとして定義されるテーブルと列を除いてすべてのようです。私がこれについて間違っているなら、私を訂正してください。

ORMアプローチと私たちのアプローチの基本的な違いは、javaオブジェクトをデータベースに格納するのではなく、クエリをjavaオブジェクトとして生成することです。私の主張をより明確にするために、ライブラリによって実行可能であるはずのサンプルコードをいくつか示します。

QueryObject query = new QueryObject();
query.addSelectedTable("customers");
query.addSelectedColumn("customerID");
query.addSelectedColumn("firstname");
query.addCondition("age < 20");
query.addLimit(10);

System.out.println(query.toMySQL()); 
//prints SELECT customerID, firstname FROM customers WHERE age < 20 LIMIT 10;

そのような図書館が存在するかどうかはわかりませんが、知っていれば喜んで知っていただければ幸いです。

さらに要求を厳しくするために、他にもいくつかの機能があり、それは素晴らしいことです。たとえば、サブクエリやその他のクエリタイプをSELECTとして処理できる必要があります。しかし、それは期待するには多すぎるでしょう;-)

4

4 に答える 4

1

Squiggle-SQLをチェックアウトしましたか?

于 2012-04-26T09:31:03.713 に答える
1

jOOQまたはCrieriaAPiのことですか?

于 2012-04-26T09:32:08.783 に答える
0

単純なアプローチは、独自の構成(hibernateDialect)を使用した「多くの」セッションです。たぶん、(休止状態の)セッション(プログラム構成)の再初期化は機能します-それを試したことはありません。

于 2012-04-26T09:27:53.187 に答える
0

Apache Cayenneは、汎用の永続クラスをサポートするオープンソースのJavaORMです。実行時に、APIを介して、またはDBスキーマをリバースエンジニアリングすることにより、DBマッピングを動的に定義し、クエリを実行して、一般的なマップのようなオブジェクトを取得します。実際、このアプローチでは、クエリだけでなく、期待できる他のすべての通常のORM機能(遅延関係、オブジェクトを変更およびコミットする機能など)を取得できます。

于 2012-04-27T06:40:34.537 に答える