ibatis TipsのparameterMap
転載:http://xulongfa.iteye.com/blog/423576
parameterMapプロパティparameterMapの値は、あらかじめ定義された要素の名前に等しい.parameterMapプロパティはあまり使用されませんが、上記のparameterClassとinline parameterを使用することが多いです(後述します).注意!動的mapped statementはinline parameterのみをサポートし、parameter mapはサポートしません.parameterMapの基本思想は、JDBC PreparedStatementの値記号に一致する一連の順序付きパラメータ系列を定義することである.例:
Xmlコード
上記の例では、parameter mapの2つのパラメータがSQL文の値記号(?)に順番に一致します.だから、最初の「?番号は「id」属性の値に置き換えられ、2番目の「?」番号は「description」プロパティの値に置き換えられます.
DAO実装クラス:
Javaコード
public boolean addProductUseParaMap(Product product) { init(); Object obj = null; boolean flag = true; try { obj = sqlMapClient.insert("insertProduct-useParaMap", product); } catch (SQLException e) { flag = false; e.printStackTrace(); } return flag; }
テストクラス:
Javaコード
Product product = new Product(); product.setId(2); product.setDescription("football"); product.setPrice(106.99D); productDao.addProductUseParaMap(product); product = (Product)productDao.getProduct(new Integer(2)); System.out.println(product);
具体的なparameterMap:
Xmlコード
[jdbcType=”VARCHAR”] [javaType=”string”] [nullValue=”NUMERIC”] [null=”-9999999”] />
要素:
1.property
プロパティpropertyはstatementのパラメータオブジェクトに渡されるJava Beanプロパティ名です.この名称は、必要に応じてstatementに複数回出現することができる(すなわち、SQL文SET句で更新された属性、または条件としてWHERE句に出現することもできる).
2.jdbcType
属性jdbcTypeは、この属性に付与されたデータベースフィールドのデータ型を明示的に指定するために使用されます.
注意!ほとんどのJDBC Driverでは、フィールドがNULLである場合にのみjdbcTypeプロパティを指定する必要があります.したがって、これらのDriverでは、フィールドがNULLである場合にのみtypeプロパティを指定する必要があります.
注意!Oracle Driverを使用している場合、NULLのフィールドにjdbcTypeプロパティを指定していない場合、これらのフィールドにNULLを割り当てると「Invalid column type」エラーが発生します.
3.javaType属性javaTypeは、付与されたパラメータJava属性のクラス名を明示的に指定するために使用されます.
4.nullValue(特に注意)
属性nullValueの値は、NULLの置換値を指定するためにpropertyタイプに対して任意の正当な値であってもよい.つまり、Java Beanの属性値が指定値に等しい場合、対応するフィールドにNULLが割り当てられます.この特性により、nullをサポートしないデータ型(すなわちint,double,floatなど)にnullを割り当てることができる.これらのデータ型の属性値がnull値(すなわち、一致-9999)に一致すると、null値の代わりにNULLがデータベースに書き込まれます.
要素
注意!parameterMapは、特定のJavaクラスに自動的にバインドされません.したがって、上記の例では、「id」および「description」属性を持つJava Beanオブジェクトは、parameterMapの入力として使用できます.入力を特定のJavaクラスにバインドする必要がある場合は、mapped-statementのresultClassプロパティを使用します.注意!Parameter Mapの名前(name)はローカルで、SQL Map XMLファイルでのみ有効です.ただし、接頭辞としてSQL Mapの名前(すなわちルート要素の名前)を付けると、別のSQL Map XMLファイルで参照できます.たとえば、上記のparameterMapを別のファイルで参照するには、「Product.insert-product-param」という名前を使用します.
parameterMapプロパティparameterMapの値は、あらかじめ定義された
Xmlコード
上記の例では、parameter mapの2つのパラメータがSQL文の値記号(?)に順番に一致します.だから、最初の「?番号は「id」属性の値に置き換えられ、2番目の「?」番号は「description」プロパティの値に置き換えられます.
DAO実装クラス:
Javaコード
テストクラス:
Javaコード
具体的なparameterMap:
Xmlコード
Class ,Class JavaBean Map ,Class , ,
Class
1.property
プロパティpropertyはstatementのパラメータオブジェクトに渡されるJava Beanプロパティ名です.この名称は、必要に応じてstatementに複数回出現することができる(すなわち、SQL文SET句で更新された属性、または条件としてWHERE句に出現することもできる).
2.jdbcType
属性jdbcTypeは、この属性に付与されたデータベースフィールドのデータ型を明示的に指定するために使用されます.
注意!ほとんどのJDBC Driverでは、フィールドがNULLである場合にのみjdbcTypeプロパティを指定する必要があります.したがって、これらのDriverでは、フィールドがNULLである場合にのみtypeプロパティを指定する必要があります.
注意!Oracle Driverを使用している場合、NULLのフィールドにjdbcTypeプロパティを指定していない場合、これらのフィールドにNULLを割り当てると「Invalid column type」エラーが発生します.
3.javaType属性javaTypeは、付与されたパラメータJava属性のクラス名を明示的に指定するために使用されます.
4.nullValue(特に注意)
属性nullValueの値は、NULLの置換値を指定するためにpropertyタイプに対して任意の正当な値であってもよい.つまり、Java Beanの属性値が指定値に等しい場合、対応するフィールドにNULLが割り当てられます.この特性により、nullをサポートしないデータ型(すなわちint,double,floatなど)にnullを割り当てることができる.これらのデータ型の属性値がnull値(すなわち、一致-9999)に一致すると、null値の代わりにNULLがデータベースに書き込まれます.
注意!parameterMapは、特定のJavaクラスに自動的にバインドされません.したがって、上記の例では、「id」および「description」属性を持つJava Beanオブジェクトは、parameterMapの入力として使用できます.入力を特定のJavaクラスにバインドする必要がある場合は、mapped-statementのresultClassプロパティを使用します.注意!Parameter Mapの名前(name)はローカルで、SQL Map XMLファイルでのみ有効です.ただし、接頭辞としてSQL Mapの名前(すなわち