Class VariableInSyntaxConvertor
java.lang.Object
nablarch.core.db.statement.sqlconvertor.SqlConvertorSupport
nablarch.core.db.statement.sqlconvertor.VariableInSyntaxConvertor
- All Implemented Interfaces:
SqlConvertor
SQL文の可変IN構文を変換するクラス。
-
Constructor Summary
-
Method Summary
Methods inherited from class nablarch.core.db.statement.sqlconvertor.SqlConvertorSupport
getBindValue
-
Constructor Details
-
VariableInSyntaxConvertor
public VariableInSyntaxConvertor()
-
-
Method Details
-
convert
SQL文の可変IN構文を変換する。 IN句を検索条件にもつSQL文のIN句の項目数を付加する。
IN句を動的に生成する場合には、バインド変数名に「[]」を付加すること。
また、対応するオブジェクトのフィールドタイプは、配列またはCollectionとすること。
本機能は、検索条件のオブジェクトにMapインタフェースの実装クラスを指定することは出来ない。 Mapクラスは、値に対する型情報が存在しないため、IN句を構築する際に値が配列またはCollectionであることのチェックが確実に行えないためである。 これは、テスト時に確実に型チェックを行えないことを意味し(例えば値がnullの場合は、その型が何かは実行時にはわからない)、 予期せぬ不具合の温床となるため本フレームワークでは敢えてMapの使用を制限している。 例えば、「userKbn」をIN句のパラメータとして指定する場合には、「USER_KBN IN (:userKbn[])」となる。 例:Entity entity = new Entity(); entity.userKbn = new String[] {"1", "2"}; parser.parse( "SELECT " + "USER_ID " + "FROM " + "USER_MTR " + "WHERE " + "$if(userKbn) {USER_KBN IN (:userKbn[])} " parser.getSql(); -> SELECT USER_ID FROM USER_MTR WHERE (0 = 1 OR (USER_KBN IN (?, ?))) parser.getNameList(); -> [userKbn[0], userKbn[1]]
- Parameters:
sql
- SQL文obj
- 検索条件をもつオブジェクト- Returns:
- 可変IN構文を変換したSQL文
-