# Parameter Map以及属性
# Parameter Map
parameterMap负责将对象属性映射成statement的参数。
<parameterMap id="parameterMapName" class="commonj.sdo.DataObject">
<parameter property ="propertyName"
[jdbcType="VARCHAR"] [javaType="string"]
[nullValue="NUMERIC"]/>
<parameter ...... />
<parameter ...... />
</parameterMap>
括号[]是可选的属性。一个parameterMap可包含任意多的parameter元素。下面讨论parameter的各个属性。
# Parameter的属性
# property
属性property是传给statement的参数对象的属性名称。该名称根据需要,可以在statement中多次出现。
# jdbcType
属性jdbcType用于显式地指定给本属性(property)赋值的数据库字段的数据类型。对于某些特定的操作,如果不指定字段的数据类型,某些JDBC Driver无法识别字段的数据类型。一个很好的例子是PreparedStatement.setNull(int parameterIndex, int sqlType)方法,要求指定数据类型。如果不指定数据类型,某些Driver可能指定为Types.Other或Types.Null。但是,不能保证所有的Driver都表现一致。对于这种情况,需要使用该属性来指定数据库字段的类型。
说明:当字段可以为NULL时最好设置jdbcType属性,否则某些Jdbc Driver会抛出异常,如db2的jcc驱动。
另一需要指定jdbcType属性的情况是字段类型为日期时间类型的情况。因为Java只有一个Date类型(java.util.Date),而大多数SQL数据库有多个(通常至少有3种)。因此,需要指定字段类型是DATE还是DATETIME。 属性jdbcType可以是java.sql.Types类中定义的任意参数的字符串值。虽然如此,还是有某些类型不支持(即BLOB)。Parameter Map和Result Map支持的数据类型说明命名SQL支持的数据类型。
# javaType
属性javaType用于显式地指定被赋值参数的类型。如果没有提供类型将被假定为Object类型。
# nullValue
属性nullValue的值可以是对于property类型来说任意的合法值,用于指定NULL的替换值。即当属性值等于指定值时,相应的字段将赋值NULL。这个特性允许在应用中给不支持null的数据类型(即int、double、float等)赋值null。
<parameterMap id="insert-product-param" class="commonj.sdo.DataObject">
<parameter property="id" jdbcType="NUMERIC" javaType="int" nullValue="-9999999"/>
<parameter property="description" jdbcType="VARCHAR" nullValue="NO_ENTRY"/>
</parameterMap>
<insert id="insertProduct" parameterMap="insert-product-param">
insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?)
</insert>
当id的属性值=-9999999的时候,会给PRD_ID设个null值。