2011-12-24 2 views
5

Sto provando a progettare un piccolo strumento CRUD, e finora ogni sfaccettatura (l'interfaccia utente Rich Faces e Managed Beans, , il database MySQL, ecc.) Sta andando bene, ma non il pezzo myBatis.Mapper MyBatis per chiamare un PROC con più parametri IN

Sono relativamente nuovo per myBatis e sto mantenendo la guida degli utenti e API a portata di mano, ma ci sono ancora alcune cose che proprio non vuole venire insieme a me, e uno è qualsiasi chiamata a una procedura che coinvolge più parametri IN. Ecco un esempio:

Questo dal DB impostare gli script:

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 

Questo dal MyMapper.java:

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

Questo dal 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> 

E infine questo dalla mia 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; 
} 

Il risultato:

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

mi noterà che ho anche provato:

  1. creando un POJO con variabili vala e Valb e getter/setter per ciascuna,
  2. making parameterType="PojoClass" nell'XML,
  3. saltando lo session.getMapper() e creando un'istanza di PojoClass,
  4. e chiamando session.selectList("getProgress", pojoInstance);

con il risultato quasi identica (cioè numero errato di argomenti).

Molto poco aiuto nella ricerca in rete, la maggior parte mi dice di fare ciò che penso di aver già fatto.

risposta

4

Penso che manchi una virgola nella chiamata di procedura.

<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

Semplici errori come questo sono i più frustranti. Grazie e buon Natale! – cobaltduck