Class VariableInSyntaxConvertor

java.lang.Object
nablarch.core.db.statement.sqlconvertor.SqlConvertorSupport
nablarch.core.db.statement.sqlconvertor.VariableInSyntaxConvertor
All Implemented Interfaces:
SqlConvertor

public class VariableInSyntaxConvertor extends SqlConvertorSupport
SQL文の可変IN構文を変換するクラス。
  • Constructor Details

    • VariableInSyntaxConvertor

      public VariableInSyntaxConvertor()
  • Method Details

    • convert

      public String convert(String sql, Object obj)
      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文