インライン・メソッドを使用するアプリケーションでの SQL ステートメントのオーバーライド

アプリケーションでインライン・メソッドを使用する場合、それらのメソッドの SQL ステートメントを、実行時に類似の SQL ステートメントで置き換えることができます。

DataFactory.getData() メソッドを呼び出して Data インターフェースのインプリメンテーションを作成する際には、java.util.Map<Object,Object> オブジェクトを渡すことができます。 Map 内のキーは、置き換える SQL ステートメントです。 Map 内の値は、代わりに使用する SQL ステートメントです。

String sql パラメーターを持つ Data オブジェクト内のメソッドを呼び出す場合、pureQuery は、それらのメソッドに渡した各 SQL ステートメントと、Map オブジェクト内のキーとの突き合わせを試みます。 キーとして使用される SQL ステートメントに一致するものがある場合はいつでも、pureQuery は、Map 内の対応する値として使用されるその SQL ステートメントを使用します。 一致するものがない場合、pureQuery は元の SQL ステートメントを実行します。

制約事項

メソッドに渡される SQL ステートメントは、キーとして使用される SQL ステートメントと正確に一致していなければなりません。 例えば、スペーシングまたは大文字化が異なる場合、それ以外は同一の 2 つの SQL ステートメントは一致しません。

SQL 値は、Data メソッドの呼び出し時に正しく実行するには、SQL キーと十分に類似していなければなりません。 例えば、INSERT ステートメントは SELECT ステートメントには置き換えられません。

SQL キーと値は、互換性のある入出力がなければなりません。 例えば、Automobile オブジェクトを戻す SQL SELECT ステートメントは、Airplane オブジェクトのプロパティーを戻す SELECT ステートメントには置き換えられません。

単純な例は、実動システムで使用される SQL ステートメントと、テスト・システムでテストされた SQL ステートメントとの置き換えです。 ただし、SQL ステートメントのオーバーライドは、より複雑な状況で役立つ場合があります。

さまざまな量のデータを操作する SQL ステートメントを実行する必要があるとしましょう。 例えば、日、週、または四半期の単位でデータを要約するビジネス・レポートを必要とする場合があります。 または、従業員がそのセキュリティー・アクセスのレベルで実行する照会を制限することが必要となる場合があります。 そのような場合、あるアプリケーションの実行と別のアプリケーションの実行の違いは、実行される SQL のバリエーションに原因があります。

pureQuery 以前には、この種の問題のソリューションには、以下のようなオプションが含まれていました。

このような方法も確かに機能します。しかし、pureQuery を使用すれば、おそらくファイルに対して直列化される Map のインスタンスにアクセスしたり、実行中のアプリケーションにアクセスしたりできる、単一のアプリケーションを作成できます。Map オブジェクトの選択が、アプリケーションの実行内容を決定します。

Map を提供しない場合、アプリケーションは、基本的で、デフォルトの、影響が少ない、ハイ・セキュリティー・バージョンの SQL ステートメントを実行できます。 Map を提供する場合、これにはアプリケーションを実行するユーザーに適切なレベルのアクセスを提供する SQL ステートメントを含めることができます。


フィードバック