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.