2017-02-07 7 views
1

Spark Java上にPostgresバックエンドを持つWebサーバービルドがあるとします。異なるサービスまたはコントローラが接続を使用してデータベースに問い合わせることを可能にするデータベース接続プールがあります。私の質問は、SQLはどこに保存されているのですか?エンタープライズJavaアプリケーションでSQLはどこにありますか?

彼らはインラインされています

String sql = "Select * From Users;" 

は、文字列をバック吐く工場に建設されたクエリです:

String sql = SqlFactory.createQuery(SQL_ENUM.TYPE, params); 

すべてのクエリは、データベースサーバ内に格納されていると、ストアド・プロシージャとして呼ばれていますか?

洞察力があれば幸いです。

+0

あなたの書き方によって異なります。あなたが言及した3つの変種はすべて可能です。 – dunni

+0

これらはすべて可能です。私はそれぞれの方法に潜在的な欠点を求めていたはずです。 Javaコードはすぐにオーバーランしますが、インライン文字列のように見えますが、ストアドプロシージャを厳密に使用すると柔軟性が損なわれる可能性があります。 – boatSoap

+0

上記以外の可能性もあります。 –

答えて

1

これはシステム設計者の責任です。正解は誰もいませんし、構成ファイル(XMLなど)のように言及していない場所もあります。通常、複数のソースが混在しています。

セキュリティと型の安全性のために、JDBCクエリを記述するときにはPreparedStatementを使用することをお勧めします。しかし、JDBCに加えて、SQLをフードの下で使用する他のライブラリの中にはJPAがあります。

経験則として、DBMSのストアドプロシージャは、DB構造のメンテナンスに関連するSQLを保持します。永続性のためのドメインロジックは、アプリケーションおよびミドルウェアのコードに存在する傾向があります。

システムによっては、アノテーションを使用して宣言的にデータ操作を確立するものがあります。

したがって、エンジニアリングでよく見られるように、「それは依存している」と答えています。

+0

ありがとうございます。私はXMLについて考えなかったし、クエリがリソースとしてロードされていると仮定している?ストアドプロシージャの "ルール"をありがとうございます。私は、データ操作のアノテーションを使って調べる必要があります。ありがとうございました。 – boatSoap

+1

ストアドプロシージャと関数については、 'CallableStatement'を試してください。 – Aidan

関連する問題