parameterMap的语法虽然简单,但很繁琐。还有一种更受欢迎更灵活的方法,可以大大简化定义和减少代码量。这种方法把JavaBean的属性名称嵌在Mapped Statement的定义中(即直接写在SQL语句中)。缺省情况下,任何没有指定parameterMap的Mapped Statement都会被解析成inline parameter(内嵌参数)。例如:
<statement id = "insertProduct" parameterClass = "com.domain.Product" >
insert into PRODUCT(PRD_ID, PRD_DESCRIPTION)
value(#id#, #description#);
</statement>
在内嵌参数中指定数据类型和NULL的替代值可以用这样的语法:
<statement id = "insertProduct" parameterClass = "com.domain.Product">
insert into PRODUCT(PRD_ID, PRD_DESCRIPTION)
values (#id:NUMRIC:-999999#,#description:VARCHAR:NO_ENTRY#);
</statement>
注意!在内嵌参数中,要指定NULL的替代值,必须要先指定数据类型。
注意!如需要在查询时也使用NULL替代值,必须同时在resultMap中定义。
注意!如果您需要指定很多的数据类型和NULL替代值,可以使用外部的parameterMap元素,这样会使代码更清晰。
假如没必要写一个JavaBean作为参数,可以直接使用基本类型的包装类(即String,Integer,Date等)作为参数。例如:
<statement id = "insertProduct" parameter = "java.lang.Integer">
select * from PRODUCT where PRD_ID = #value#
</statement>
假设PRD_ID的数据类型是NUMERIC,要调用上面的mapped statement,可以传入一个java.lang.Integer对象作为参数。Integer对象的值将代替#value#参数。当使用基本类型包装类代替javaBean时,切记要使用#value#作为参数。Result Map也支持使用基本类型作为结果参数。
为了使定义更简洁,基本类型可以使用别名。例如,可以用“int”来代替“java.lang.Integer”。
假设没必要谢一个JavaBean作为参数,而要传入的参数又不只一个时,可以使用Map类(如HashMap,TreeMap等)作为参数对象。例如:
<statement id = "insertProduct" parameterClass = "java.util.Map">
select * from PRODUCT
where PRD_CAT_ID = #catId#
and
PRD_CODE = #code#
</statement>
可以注意到mapped statement的形式完全没有区别!上面的例子中,如果把Map对象作为输入参数去调用mapped statement,Map对象必须包含键值“catId”和“code”。键值引用的对象必须是合适的类型,以上面的例子来说,必须是Integer和String。Result Map也支持使用Map类型作为结果参数。
Map类型也可以使用别名。例如,可以用“map”来代替“java.util.Map”。