Stored procedures MyBatis映射器调用具有多个IN参数的进程

Stored procedures MyBatis映射器调用具有多个IN参数的进程,stored-procedures,mybatis,Stored Procedures,Mybatis,我正在尝试设计一个小型CRUD工具,到目前为止,每个方面(RichFacesUI和托管bean, 验证、mySQL数据库等)进行得很顺利,但myBatis部分没有 我对myBatis相对来说比较陌生,我会把用户指南和API放在手边,但是没有 对我来说,仍然有一些事情是无法解决的,其中之一就是任何程序的调用 涉及多个参数。以下是一个例子: 这可以从数据库设置脚本中获得: create procedure MY_FOO_PROC (IN valA VARCHAR(15), IN valB CHAR(

我正在尝试设计一个小型CRUD工具,到目前为止,每个方面(RichFacesUI和托管bean, 验证、mySQL数据库等)进行得很顺利,但myBatis部分没有

我对myBatis相对来说比较陌生,我会把用户指南和API放在手边,但是没有 对我来说,仍然有一些事情是无法解决的,其中之一就是任何程序的调用 涉及多个参数。以下是一个例子:

这可以从数据库设置脚本中获得:

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 
这来自MyMapper.java:

public interface MyMapper {
List<MyFooClass> getProgress (
        @Param("valA") String valueA, @Param("valB") String valueB);
}
我会注意到,我也尝试过:

  • 使用变量valA和valB以及的getter/setter创建POJO 各
  • 在XML中生成
    parameterType=“PojoClass”
  • 跳过
    会话.getMapper()
    并创建PojoClass的实例
  • 调用session.selectList(“getProgress”,pojoInstance)
  • 结果几乎相同(即参数数目错误)


    在网络搜索方面几乎没有什么帮助,大多数人告诉我做我认为我已经做过的事情。

    我认为您在过程调用中遗漏了一个逗号

    <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>
    
    
    {呼叫我的_FOO_PROC(
    
    #{valA,mode=IN,jdbcType=VARCHAR},--像这样的简单错误是最令人沮丧的。谢谢你,圣诞快乐!
    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;
    }
    
    ### 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
    
    <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>