MyBatis-mapper-Aufruf einer Prozedur mit mehreren Parametern

Ich versuche zu entwerfen, eine kleine CRUD-tool, und bisher, jede Facette (die Rich Faces UI-und Managed Beans,
überprüfung der mySQL-Datenbank, etc.) geht in Ordnung, aber nicht die myBatis Stück.

Ich bin relativ neu in myBatis und führe das Benutzer-Handbuch und API-nah bei der hand, aber es
sind noch einige Dinge, die einfach nicht kommen bei mir zusammen, und ist jeder Aufruf einer Prozedur
mit mehreren Parametern. Hier ist ein Beispiel:

Diese aus dem DB-set-up-Skripte:

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 

Diese aus MyMapper.java:

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

Diese aus 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>

Schließlich aus meiner DAO-Klasse:

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;
}

Das Ergebnis:

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

Werde ich bemerken, dass ich auch versucht:

  1. erstellen eines POJO mit Variablen valA und valB und Getter/setter für
    jeder,
  2. machen parameterType="PojoClass" im XML -,
  3. überspringen der session.getMapper() und der Erstellung einer Instanz von PojoClass,
  4. und ruft session.selectList("getProgress", pojoInstance);

mit dem fast identischen Ergebnis (D. H. falsche Anzahl von Argumenten).

Sehr wenig Hilfe auf net-Suche, die meisten sagen mir, das zu tun, was ich denke, habe ich bereits getan.

InformationsquelleAutor cobaltduck | 2011-12-24
Schreibe einen Kommentar