2011-12-24 80 views
5

我正在尝试设计一个小的CRUD工具,并且到目前为止,每个方面(Rich Faces UI和托管豆, 验证,mySQL数据库等)都将很好,但不是myBatis的一块。MyBatis映射器调用多个IN参数的PROC

我是比较新的MyBatis的和我保持用户指南和API近在咫尺,但 仍然有一些事情,就不会为我走到一起,一个是一个过程 涉及任何呼叫多个IN参数。这里有一个例子:

这从数据库建立脚本:

create procedure MY_FOO_PROC (IN valA VARCHAR(15), IN valB CHAR(1)) 
    begin 
     select blah from blah where blah = valA and blah = valB etc.; 
    end 

这从MyMapper.java:

public interface MyMapper { 
List<MyFooClass> getProgress (
     @Param("valA") String valueA, @Param("valB") String valueB); 
} 

这从MyMapper.xml:

<select id="getProgress" parameterType="map" 
    resultMap="MyFooMap" statementType="CALLABLE"> 
    { call MY_FOO_PROC (
     #{valA, mode=IN, jdbcType=VARCHAR} 
     #{valB, mode=IN, jdbcType=CHAR} 
    )} 
</select> 

最后这个来自我的DAO类:

public static List<MyFooClass> 
     doGetProgress (String valueA, String valueB) { 
    SqlSession session = MyBatisConnectionFactory.getInstance().getSqlSessionFactory().openSession(); 
    EsparMapper mapper = session.getMapper(MyMapper.class); 
    List<MyFooClass> listFoo = mapper.getProgress(valueA, valueB); // line which originates exception below 
    session.close(); 
    return listFoo; 
} 

结果:

### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect number of arguments for PROCEDURE dbname.MY_FOO_PROC; expected 2, got 1 
### The error may involve my.package.names.getProgress-Inline 
### The error occurred while setting parameters 

我会注意到,我也尝试:

  1. 创建与变量瓦拉和值Valb并为每个 getter/setter方法一个POJO,
  2. 制作parameterType="PojoClass"在XML中,
  3. 跳过session.getMapper()并创建一个PojoClass的实例,
  4. 并调用session.selectList("getProgress", pojoInstance);

与几乎相同的结果(即错误的参数数量)。

对网络搜索的帮助很少,大部分告诉我要做我认为我已经完成的工作。

回答

4

我想你在程序调用中缺少一个逗号。

<select id="getProgress" parameterType="map" 
    resultMap="MyFooMap" statementType="CALLABLE"> 
    { call MY_FOO_PROC (
     #{valA, mode=IN, jdbcType=VARCHAR} , --<--- this 
     #{valB, mode=IN, jdbcType=CHAR} 
)} 
</select> 
+2

像这样的简单错误是最令人沮丧的。谢谢你,圣诞快乐! – cobaltduck 2011-12-24 21:51:30