MyBatis mappeur pour appeler un PROC avec de multiples paramètres

Je suis en train de créer une petite CRUD outil, et jusqu'à présent, toutes les facettes (les Riches Visages de l'INTERFACE utilisateur et Géré des Haricots,
la validation, la base de données mySQL, etc.) va bien, mais pas le myBatis pièce.

Je suis relativement nouveau à myBatis et je suis en gardant le guide de l'utilisateur et de l'API à portée de la main, mais il y
reste encore des choses qui juste ne viennent pas ensemble pour moi, et on est tout appel à une procédure
impliquant de multiples paramètres. Voici un exemple:

Ce à partir de la DB configurer des scripts:

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 

Ce à partir de MyMapper.java:

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

Ce à partir de 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>

Et enfin ce de ma classe 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;
}

Le résultat:

### 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

Je note que j'ai aussi essayé:

  1. la création d'un POJO avec des variables valA et valB et des getters/setters pour
    chaque,
  2. faire parameterType="PojoClass" dans le XML,
  3. sauter le session.getMapper() et la création d'une instance de PojoClass,
  4. et de l'appel de session.selectList("getProgress", pojoInstance);

avec près de résultat identique (c'est à dire un mauvais nombre d'arguments).

Très peu d'aide sur le filet de recherche, en plus de me dire de faire ce que je pense je l'ai déjà fait.

OriginalL'auteur cobaltduck | 2011-12-24