2011-12-24 18 views
5

私は小さなCRUDツールを設計しようとしており、これまでのところすべての面(Rich Faces UIとManaged Beans、 検証、mySQLデータベースなど)は進んでいますしかし、myBatisの作品ではありません。複数のINパラメータを持つPROCを呼び出すMyBatisマッパー

私はMyBatisのは比較的新しいだと手元のユーザーガイドやAPIの近くに保管しておりますが、そこ はまだ私だ​​けのために一緒に来ることはありませんいくつかのものであり、1が関与する手続き への呼び出しです複数のINパラメータ。ここでは一例です:DBから

これは、スクリプトを設定:MyMapper.javaから

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 

この:

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. を それぞれの変数のValaとvalBとゲッター/セッターとPOJOを作成し、
  2. づくりXMLのparameterType="PojoClass"
  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

関連する問題