Inline Parameter Maps

If you prefer to use inline parameters instead of parameter maps, you can add extra type information inline too. The inline parameter map syntax lets you embed the property name, the property type, the column type, and a null value replacement into a parametrized SQL statement. The next four examples shows statements written with inline parameters.

<statement id="insertProduct" parameterClass="Product">
  insert into PRODUCT (PRD_ID, PRD_DESCRIPTION)
  values (#id#, #description#)
</statement>

The following example shows how dbTypes can be declared inline.

<statement id="insertProduct" parameterClass="Product">
  insert into PRODUCT (PRD_ID, PRD_DESCRIPTION)
  values (#id, dbType=int#, #description, dbType=VarChar#)
</statement>

The next example shows how dbTypes and null value replacements can also be declared inline.

<statement id="insertProduct" parameterClass="Product">
  insert into PRODUCT (PRD_ID, PRD_DESCRIPTION)
  values (#id, dbType=int, nullValue=-999999#, #description, dbType=VarChar#)
</statement>

A more complete example.

<update id="UpdateAccountViaInlineParameters" parameterClass="Account">
 update Accounts set
 Account_FirstName = #FirstName#,
 Account_LastName = #LastName#,
 Account_Email = #EmailAddress,type=string,dbType=Varchar,nullValue=no_email@provided.com#
 where
 Account_ID = #Id#
</update>
Note: Inline parameter maps are handy for small jobs, but when there are a lot of type descriptors and null value replacements in a complex statement, an industrial-strength, external parameterMap can be easier.

Standard Type Parameters

In practice, you will find that many statements take a single parameter, often an integer or a string. Rather than wrap a single value in another object, you can use the standard library object (string, integer, et cetera) as the parameter directly. The following example shows a statement using a standard type parameter.

<statement id="getProduct" parameterClass="System.Int32">
  select * from PRODUCT where PRD_ID = #value#
</statement>

Assuming PRD_ID is a numeric type, when a call is made to this Mapped Statement, a standard integer can be passed in. The #value# parameter will be replaced with the value of the integer. The name value is simply a placeholder, you can use another moniker of your choice. Result Maps support primitive types as results as well.

For your convenience, the following PHP primitive types are supported.

  • string
  • float or double
  • integer or int
  • bool or boolean

Array Type Parameters

You can also pass in a array as a parameter object. This would usually be a an associative array. The following example shows a using an array for a parameterClass.

<statement id="getProduct" parameterClass="array">
  select * from PRODUCT
  where PRD_CAT_ID = #catId#
  and PRD_CODE = #code#
</statement>

In the above example, notice that the SQL in this Mapped Statement looks like any other. There is no difference in how the inline parameters are used. If an associative array is passed, it must contain keys named catId and code. The values referenced by those keys must be of the appropriate type for the column, just as they would be if passed from a properties object.