Ibatis-dynamic-sql
iBATIS-ダイナミックSQL
ダイナミックSQLは、iBATISの非常に強力な機能です。 パラメータオブジェクトの状態に基づいてWHERE句の条件を変更する必要がある場合があります。 そのような状況では、iBATISは、SQLの再利用性と柔軟性を強化するために、マップされたステートメント内で使用できる動的SQLタグのセットを提供します。
すべてのロジックは、いくつかの追加タグを使用して.XMLファイルに配置されます。 以下は、SELECTステートメントが2つの方法で機能する例です-
- IDを渡すと、そのIDに対応するすべてのレコードが返されます。 *それ以外の場合、従業員IDがNULLに設定されているすべてのレコードが返されます。
次のように<isNotEmpty>タグを使用して条件を確認できます。 ここでは、渡されたプロパティが空でない場合にのみ条件が追加されます。
従業員のIDや名前を選択できるクエリが必要な場合、SELECTステートメントは次のようになります-
動的SQLの例
次の例は、動的SQLを使用してSELECTステートメントを作成する方法を示しています。 考慮してください、MySQLには次のEMPLOYEEテーブルがあります-
次のように、このテーブルにはレコードが1つだけあるとします-
従業員POJOクラス
読み取り操作を実行するには、次のようにEmployee.javaにEmployeeクラスを用意します-
Employee.xmlファイル
iBATISを使用してSQLマッピングステートメントを定義するには、次の変更された<select>タグをEmployee.xmlに追加し、このタグ定義内で、ダイナミックSQL SELECTクエリを実行するためにIbatisReadDy.javaで使用される「id」を定義しますデータベース。
上記のSELECT文は2つの方法で動作します-
- IDを渡すと、そのIDに対応するレコードが返されます。それ以外の場合は、すべてのレコードが返されます。
IbatisReadDy.javaファイル
このファイルには、従業員テーブルから条件付きレコードを読み取るためのアプリケーションレベルのロジックがあります-
コンパイルと実行
上記のソフトウェアをコンパイルして実行する手順は次のとおりです。 コンパイルと実行に進む前に、PATHとCLASSPATHが適切に設定されていることを確認してください。
- 上記のようにEmployee.xmlを作成します。
- 上記のようにEmployee.javaを作成し、コンパイルします。
- 上記のようにIbatisReadDy.javaを作成してコンパイルします。
- IbatisReadDyバイナリを実行してプログラムを実行します。
次の結果が得られ、EMPLOYEEテーブルからレコードが読み取られます。
_smc.queryForList( "Employee.findByID"、null)_として null を渡して上記の例を試してください。
iBATIS OGNL式
iBATISは、強力なOGNLベースの式を提供して、他のほとんどの要素を排除します。
- ifステートメント
- 選択、いつ、それ以外の場合
- whereステートメント *foreachステートメント
ifステートメント
動的SQLで最もよく行うことは、where句の一部を条件付きで含めることです。 たとえば-
このステートメントは、オプションのテキスト検索タイプの機能を提供します。 タイトルを渡さない場合、すべてのアクティブなブログが返されます。 ただし、タイトルを渡すと、指定された like 条件のタイトルが検索されます。
次のように、複数の if 条件を含めることができます-
選択、タイミング、およびその他のステートメント
iBATISは、Javaのswitchステートメントに似た choose 要素を提供します。 多くのオプションから1つのケースのみを選択するのに役立ちます。
次の例では、タイトルが指定されている場合はタイトルのみで検索し、タイトルが指定されている場合は作成者のみで検索します。 どちらも提供されていない場合は、注目のブログのみが返されます-
whereステートメント
前の例を見て、どの条件も満たされない場合はどうなるかを確認してください。 あなたはこのように見えるSQLで終わるでしょう-
これは失敗しますが、iBATISには1つの簡単な変更で簡単なソリューションがあり、すべてが正常に機能します-
foreachステートメント
foreach要素を使用すると、コレクションを指定し、要素の本体内で使用できるアイテム変数とインデックス変数を宣言できます。
また、開始文字列と終了文字列を指定し、繰り返しの間に配置するセパレータを追加することもできます。 次のように IN 条件を構築できます-