存储过程的调用是使用<procedure>元素来调用的, 下面是一个使用带输出参数的存储过程的例子:
<parameterMap id=”swapParameters” class=”map” >
<parameter property=”email1″ jdbcType=”VARCHAR” javaType=”java.lang.String” mode=”INOUT”/>
<parameter property=”email2″ jdbcType=”VARCHAR” javaType=”java.lang.String” mode=”INOUT”/>
</parameterMap>
[color=red]如果你的存储过程返回一个结果集,那么使用queryForList()或者queryForObject来调用, 如果你的存储过程既返回结果集又更新数据库数据,那么需要配置<transactionManager>的commitRequired=’true’[/color]
[color=red]如果存储过程不返回结果集,或者仅仅以输出参数的形式返回结果集,那么应该使用update()方法。如果使用queryForList()或者queryForObject来调用,会导致线程阻塞,无法往下执行,特别是在定时器的时候,定时器就不循环执行了[/color]
<procedure id=”swapEmailAddresses” parameterMap=”swapParameters” >
{call swap_email_address (?, ?)}
</procedure>
<parameterMap id=”swapParameters” class=”map” >
<parameter property=”email1″ jdbcType=”VARCHAR” javaType=”java.lang.String” mode=”INOUT”/>
<parameter property=”email2″ jdbcType=”VARCHAR” javaType=”java.lang.String” mode=”INOUT”/>
</parameterMap>
[color=red]如果你的存储过程返回一个结果集,那么使用queryForList()或者queryForObject来调用, 如果你的存储过程既返回结果集又更新数据库数据,那么需要配置<transactionManager>的commitRequired=’true’[/color]
[color=red]如果存储过程不返回结果集,或者仅仅以输出参数的形式返回结果集,那么应该使用update()方法。如果使用queryForList()或者queryForObject来调用,会导致线程阻塞,无法往下执行,特别是在定时器的时候,定时器就不循环执行了[/color]
<procedure id=”swapEmailAddresses” parameterMap=”swapParameters” >
{call swap_email_address (?, ?)}
</procedure>