【Ibatis】(八)、parameterMap详解

parameterMap
属性parameterMap的值等于一个预先定义的<parameterMap>元素的名称。parameterMap属性很少使用,更多的是使用上面的parameterClass和inline parameter(接下来会讨论)。
注意!动态mapped statement只支持inline parameter,不支持parameter map。
parameterMap的基本思想是定义一系列有次序的参数系列,用于匹配JDBC PreparedStatement的值符号。例如:

Xml代码 收藏代码
  1. <parameterMapclass="com.ibatis.dataobject.Product"id="insert-product-param">
  2. <parameterproperty="id"/>
  3. <parameterproperty="description"/>
  4. <parameterproperty="price"/>
  5. </parameterMap>
  6. <statementid="insertProduct-useParaMap"parameterMap="insert-product-param">
  7. <![CDATA[insertintot_product(prd_id,prd_description,prd_price)values(?,?,?)]]>
  8. </statement>

上面的例子中,parameter map的两个参数按次序匹配SQL语句中的值符号(?)。因此,第一个“?”号将被“id”属性的值替换,而第二个“?”号将被“description”属性的值替换。

DAO实现类:

Java代码 收藏代码
  1. publicbooleanaddProductUseParaMap(Productproduct){
  2. init();
  3. Objectobj=null;
  4. booleanflag=true;
  5. try{
  6. obj=sqlMapClient.insert("insertProduct-useParaMap",product);
  7. }catch(SQLExceptione){
  8. flag=false;
  9. e.printStackTrace();
  10. }
  11. returnflag;
  12. }

测试类:

Java代码 收藏代码
  1. Productproduct=newProduct();
  2. product.setId(2);
  3. product.setDescription("football");
  4. product.setPrice(106.99D);
  5. productDao.addProductUseParaMap(product);
  6. product=(Product)productDao.getProduct(newInteger(2));
  7. System.out.println(product);

具体的parameterMap:

Xml代码 收藏代码
  1. <parameterMapid=”parameterMapName”[class=”com.domain.Product”]>
  2. <parameterproperty=”propertyName”
  3. [jdbcType=”VARCHAR”]
  4. [javaType=”string”]
  5. [nullValue=”NUMERIC”]
  6. [null=”-9999999”]
  7. />
  8. <parameter……/>
  9. <parameter……/>
  10. </parameterMap>
Class属性是可选的,Class属性必须是JavaBean或Map实列,Class属 性虽是可选的,但推荐大家指定,
Class属性可以用来验证传入的参数的合法性及优化查询

<parameter>元素:

1.property

属性property是传给statement的参数对象的Java Bean属性名称。该名称根据需要,可以在statement中多次出现(即在SQL语句SET子句中被更新的属性,也可以作为条件出现在WHERE子句中)。

2.jdbcType

属性jdbcType用于显式地指定给本属性(property)赋值的数据库字段的数据类型。

注意!大多数JDBC Driver只有在字段可以为NULL时需要指定jdbcType属性。因此,对于这些Driver,只是在字段可以为NULL时才需要指定type属性。

注意!当使用Oracle Driver时,如果没有给可以为NULL的字段指定jdbcType属性,当试图给这些字段赋值NULL时,会出现“Invalid column type”错误。

3.javaType
属性javaType用于显式地指定被赋值参数Java属性的类名。

4.nullValue(要特别关注)

属性nullValue的值可以是对于property类型来说任意的合法值,用于指定NULL的替换值。就是说,当Java Bean的属性值等于指定值时,相应的字段将赋值NULL。这个特性允许在应用中给不支持null的数据类型(即int,double,float等)赋值null。当这些数据类型的属性值匹配null值(即匹配-9999)时,NULL将代替null值写入数据库。

</parameter>元素

注意!parameterMap并不自动地绑定到特定的Java类。因此在上面的例子中,任何拥有“id”和“description”属性的Java Bean对象,都可以作为parameterMap的输入。如果需要将输入绑定到特定的Java类,可以使用mapped-statement的resultClass属性。
注意!Parameter Map的名称(name)局部的,只在定义它的SQL Map XML文件中有效。不过,加上SQL Map的名称(即在<sqlMap>根元素中的名称)作为前缀,您可以在另一个SQL Map XML文件中引用它。例如,要在另一个文件中引用以上的parameterMap,可以使用名称“Product.insert-product-param”。

你可能感兴趣的:(parameter)