无法从mybatis执行的oracle过程中接收参数

我使用Spring 3.0.5开发java应用程序,并使用mybatis-spring使用数据库Oracle。

我有一个mybatis界面:

public interface SubscriberMapper { Subscriber getSubscriberByMsisdn(String msisdn); void insertSubscriber(Subscriber subscriber); void updateSubscriber(Subscriber subscriber); void canCustomerSubscribe(@Param("msisdn") String msisdn, @Param("responseCode") Integer responseCode); 

}

canCustomerSubscribe的mybatis xml内容:

      CALL wallet.pkg_wallet_validation.can_customer_subscribe(#{msisdn}, #{responseCode})  

和要执行的代码:

 public void subscribe(String msisdn) throws InvalidArgumentException { Integer responseCode = 0; subscriberMapper.canCustomerSubscribe(msisdn, responseCode); System.out.println("msisdn: " + msisdn + ", responseCode: " + responseCode); } 

当我用无效的“msisdn”执行“subscribe”方法时,我没有收到来自程序的实际值。 在数据库中执行此过程会返回reponseValue = 1001,但在Java代码中我收到0.我打开调试日志记录为stout for mybatis,输出为:

  2011-10-19 10:32:46,732 DEBUG [main](Slf4jImpl.java:28)ooo连接已打开
 2011-10-19 10:32:46,909 DEBUG [main](Slf4jImpl.java:28)==>执行:CALL wallet.pkg_wallet_validation.can_customer_subscribe(?,?) 
 2011-10-19 10:32:46,911 DEBUG [main](Slf4jImpl.java:28)==>参数:509999999(String),0(整数)
 msisdn:509999999,responseCode:0

当我更改“subscribe”方法responseCode = null时,我收到并错误:

  org.springframework.jdbc.UncategorizedSQLException:设置null参数时出错。 大多数JDBC驱动程序都要求必须为所有可为空的参数指定JdbcType。 原因:java.sql.SQLException:列类型无效
 ; 未分类的SQL []的SQLException;  SQL状态[null]; 错误代码[17004]; 列类型无效; 嵌套exception是java.sql.SQLException:列类型无效

我找到了解决方案 在canCustomerSubscribe方法中,Map必须是user而不是两个参数。

  void canCustomerSubscribe(Map params); 

mybatis xml内容:

  

(我需要在参数属性之间添加逗号)

从订阅服务方法调用它:

 public void subscribe(String msisdn) throws InvalidArgumentException { Map params = new HashMap(); params.put("msisdn", msisdn); params.put("responseCode", null); subscriberMapper.canCustomerSubscribe(params); System.out.println(params.get("responseCode")); }