2011-12-24 47 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