MyBatis映射器调用具有多个IN参数的PROC

cob*_*uck 5 stored-procedures mybatis

我正在尝试设计一个小型CRUD工具,到目前为止,每个方面(Rich Faces UI和Managed Beans,验证,mySQL数据库等)都很顺利,但不是myBatis.

我对myBatis比较陌生,并且保持用户指南和API近在咫尺,但仍有一些东西对我来说不会合在一起,一个是对涉及多个IN参数的过程的任何调用.这是一个例子:

这来自DB设置脚本:

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 
Run Code Online (Sandbox Code Playgroud)

这来自MyMapper.java:

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

这来自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>
Run Code Online (Sandbox Code Playgroud)

最后来自我的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;
}
Run Code Online (Sandbox Code Playgroud)

结果:

### 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
Run Code Online (Sandbox Code Playgroud)

我会注意到我也尝试过:

  1. 使用变量valA和valB以及每个变量的getter/setter创建一个POJO,
  2. parameterType="PojoClass"在XML中制作,
  3. 跳过session.getMapper()并创建PojoClass的实例,
  4. 并打电话 session.selectList("getProgress", pojoInstance);

结果几乎相同(即参数数量错误).

网络搜索的帮助很少,大多数告诉我做我认为我已经做过的事情.

pab*_*han 5

我想你在程序调用中缺少一个逗号.

<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>
Run Code Online (Sandbox Code Playgroud)

  • 像这样的简单错误是最令人沮丧的.谢谢你,圣诞快乐! (3认同)