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:
- creando un POJO con variabili vala e Valb e getter/setter per ciascuna,
- making
parameterType="PojoClass"
nell'XML, - saltando lo
session.getMapper()
e creando un'istanza di PojoClass, - 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.
Semplici errori come questo sono i più frustranti. Grazie e buon Natale! – cobaltduck