4

質問

私のいくつかのプロジェクトでは、SQL コードを使用しましたが、これは特別なことではありません。しかし、私はこの戦略を再考していました。SO を検索して、コードと SQL ステートメントを分離するものを探しました。

私が気に入った答えが1つ見つかりました。プロパティファイルにすべてのSQLステートメントを収集します。綺麗で良いと思います。しかし、変数を挿入したい場合はどうでしょう。

私が見つけた別の解決策は、DAO オブジェクトの使用でした。たとえば、addCustomer(Customer customer)、deleteCustomer(int CustomerId) などのメソッドを使用して MYSQLFactory クラスを作成するとします。SQL コードを一元化します。それでも別れたとは言いません。

Hibernate のような ORM を使用せずにこれを行うより良い方法はありますか。読めば読むほど、JAVA でこれをうまく行う方法はないと確信するようになりました。

検索した情報源

Java - 外部ファイルへの SQL ステートメントの保管

SQL を Java コードから分離する

アップデート

素晴らしい反応をありがとう。私はちょうどこれについて興味がありました。@Gilbert、それは素晴らしい解決策だと思います。実際のところ、私はすでにあなたの解決策を一度に使用していました。:)

時々、特定の問題に対する新しいアプローチを研究したいだけです。

4

4 に答える 4

2

あなたはあなたの目標が何であるかを述べていません。すべての SQL コードを 1 か所にまとめるための技術的なソリューションを探しているだけなのか、それとも複数の言語でアプリケーションを管理する方法についてアドバイスを求めているだけなのかはわかりません。

別の言語で SQL コードを管理する場合は、次のような人が役立ちます。

  • ストアド プロシージャ
  • ビュー

以下はあなたの友達ではありません:

  • アドホック クエリ

問題は、データベースへの「API」です。SQL は生データ テーブルへのインターフェイスです。ただし、通常、データベースはアプリケーションのコンポーネントであり、独自の API を持つ必要があります。一般に、この層は、ビューとストアド プロシージャで構成する必要があります。したがって、たとえば、更新と挿入 (アドホック クエリ) はストアド プロシージャでラップする必要があります。

于 2013-01-29T14:55:41.303 に答える
1

いいえ、ありません。ORM を使用しない場合は、コードのどこかで直接 SQL 呼び出しを行う必要があります。ファクトリ パターンで SQL 呼び出しの難読化を開始すると、不適切な ORM を作成することになります。

于 2013-01-29T14:52:38.663 に答える
1

個人的には、SQL クエリが実行される Java ファイルに SQL クエリを含めることを好みます。これにより、コードの保守が容易になります。複数のファイルを切り替える必要はありません。

とはいえ、SQL クエリを外部ファイル (プロパティや XML など) に保存するのは非常に簡単です。変数を挿入する必要がある場合は、とにかく準備済みステートメントを使用するため、SQL は次のようになります。

select foo.* from Foo foo where foo.id = ?

唯一の問題は、動的に生成される SQL クエリの場合です (たとえば、一連のオプションの検索条件から)。しかし、クエリの一部を連結せずにこの種の SQL クエリを生成できる API があります。

于 2013-01-29T14:56:23.830 に答える
0

あなたの質問に関して:
理想的な方法はありません。いくつかの解決策があります:
A. ORM を使用します - なぜそれを望まないのかわかりません。
B.あなたが提案したようにプロパティファイルを使用してください-パラメーターに関しては、
それを処理する必要があります。いくつかのフレームワークを使用してパラメーター置換を実行することを検討してください。
C. DB のストアド プロシージャ/ビュー レイヤーを使用して、SQL クエリの一部を抽象化できます。

于 2013-01-29T14:59:04.107 に答える