parameterClass
parameterClass 属性的值是 Java 类的全限定名(即包括类的包名)。 parameterClass 属性
是可选的,但强烈建议使用。它的目的是限制输入参数的类型为指定的 Java 类, 并优化框
架的性能。 如果您使用 parameterMap , 则没有必要使用 parameterClass 属性。 例如, 如果要
只允许 Java 类“ examples.domain.Product ”作为输入参数,可以这样作:
<statement id=”statementName” parameterClass=”examples.domain.Product”> insert into PRODUCT values (#id#, #description#, #price#) </statement>
<!--StartFragment-->
重要提示: 虽然 2.0 向后兼容,但强烈建议使用 parameterClass (除非没必要)。通过
提供 parameterClass ,您可以获得更好的性能,因为如果框架事先知道这个类,就可以优化
自身的性能。
如果不指定 parameterClass 参数,任何带有合适属性( get/set 方法)的 Java Bean 都可
以作为输入参数。
<!--EndFragment--><!--StartFragment-->
parameterMap
属性 parameterMap 的值等于一个预先定义的 元素的名称。 parameterMap
属性很少使用,更多的是使用上面的 parameterClass 和 inline parameter (接下来会讨论)。
注意! 动态 mapped statement 只支持 inline parameter ,不支持 parameter map 。
parameterMap 的基本思想是定义一系列有次序的参数系列,用于匹配 JDBC
PreparedStatement 的值符号。例如:
<parameterMap id=”insert-product-param” class=”com.domain.Product”> <parameter property=”id”/> <parameter property=”description”/> </parameterMap>
<statement id=”insertProduct” parameterMap=”insert-product-param”> insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?); </statement>
<!--StartFragment-->
上面的例子中, parameter map 的两个参数按次序匹配 SQL 语句中的值符号( ? )。因此,
第一个“ ? ”号将被“ id ”属性的值替换,而第二个“ ? ”号将被“ description ”属性的值替
换。 Parameter Map 及其选项将在以后详细讨论
<!--StartFragment-->
Inline Parameter 简介
现在简单介绍一下 inline parameter ,详细讨论见后面章节。 Inline parameter 可以嵌在
mapped statement 内部使用。例如:
<!--EndFragment-->
<statement id=”insertProduct” > insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (#id#, #description#); </statement>
<!--StartFragment-->
以上例子中, 内嵌的参数是 #id# 和 #description# 。 每个参数代表一个 Java Bean 属性, 用
于给 SQL 语句中相应的位置赋值。 上面例子中, Product 对象的 id 和 description 属性的值将
会替换 SQL 语句中相应的符号。 因此, 对于 id=5 , description= ‘ dog ’的 Product 对象, SQL
语句变为:
insert into PRODUCT (PRD_ID, PRD_DESCRIPTION)
values (5, ‘dog’);
<!--EndFragment--><!--EndFragment-->