Estoy tratando de diseñar una pequeña herramienta CRUD, y hasta ahora cada faceta (la interfaz de usuario Rich Faces y Beans gestionados, , la base de datos mySQL, etc.) bien, pero no la pieza myBatis.MyBatis mapper para llamar a PROC con múltiples parámetros IN
soy relativamente nuevo en mybatis y estoy manteniendo la guía del usuario y API a mano, pero hay todavía hay algunas cosas que simplemente no va unido a mí, y uno es cualquier llamada a un procedimiento que implica múltiples parámetros IN. Aquí está un ejemplo:
Este de la BD establecer 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
Este desde MyMapper.java:
public interface MyMapper {
List<MyFooClass> getProgress (
@Param("valA") String valueA, @Param("valB") String valueB);
}
Este desde 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>
Y finalmente esto de mi clase 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;
}
El resultado:
### 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
que se tenga en cuenta que también he intentado:
- creación de un POJO con variables Vala y Valb y getters/setters para cada uno,
- decisiones
parameterType="PojoClass"
en el XML, - omitiendo el
session.getMapper()
y creando una instancia de PojoClass, - y llamando
session.selectList("getProgress", pojoInstance);
con el resultado casi idéntico (es decir, número incorrecto de argumentos).
Muy poca ayuda en la búsqueda en la red, la mayoría me dice que haga lo que creo que ya he hecho.
Los errores simples como este son los más frustrantes. ¡Gracias y Feliz Navidad! – cobaltduck