2011-12-24 15 views
5

Próbuję zaprojektować małe narzędzie CRUD i jak do tej pory każdy aspekt (Rich Faces UI i Managed Beans, sprawdzanie poprawności, baza danych mySQL, itp.) Będzie dobrze, ale nie kawałek myBatis.MyBatis mapper do wywoływania PROC z wieloma parametrami IN

Jestem względnie nowy w myBatis i prowadzę poradnik dla użytkowników i API pod ręką, ale tam są pewne rzeczy, które po prostu nie będą się ze mną spotykać, a jedno to jakikolwiek telefon do procedury z udziałem wiele parametrów IN. Oto przykład:

To z DB skonfigurować skrypty:

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 

To z MyMapper.java:

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

To z 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> 

I na koniec to z mojej klasy 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; 
} 

Rezultat:

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

będę pamiętać, że próbowałem również:

  1. tworząc POJO ze zmiennymi Vala i valB i pobierające/ustawiające dla każdego,
  2. podejmowania parameterType="PojoClass" w języku XML,
  3. pomijając session.getMapper() i tworząc instancję PojoClass,
  4. i wywołanie session.selectList("getProgress", pojoInstance);

z prawie identyczne wyniki (tj zła liczba argumentów).

Bardzo mała pomoc w wyszukiwaniu sieciowym, większość z nich mówi mi, żebym zrobił to, co już zrobiłem.

Odpowiedz

4

Myślę, że brakuje ci przecinka w wywołaniu procedury.

<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

Proste błędy, takie jak ten, są najbardziej frustrujące. Dziękuję i Wesołych Świąt! – cobaltduck

Powiązane problemy