【问题标题】:MyBatis mapper to call a PROC with multiple IN parametersMyBatis 映射器调用具有多个 IN 参数的 PROC
【发布时间】:2011-12-25 04:24:43
【问题描述】:

我正在尝试设计一个小型 CRUD 工具,到目前为止,每个方面(Rich Faces UI 和 Managed Beans, 验证、mySQL 数据库等)运行良好,但 myBatis 却不行。

我对 myBatis 还比较陌生,我会随时掌握用户指南和 API,但是那里 仍然有一些东西对我来说无法组合在一起,其中一个是对程序的任何调用 涉及多个 IN 参数。这是一个例子:

这来自数据库设置脚本:

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);
}

来自 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>

最后是我的 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;
}

结果:

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

我会注意到我也尝试过:

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

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

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

【问题讨论】:

    标签: stored-procedures mybatis


    【解决方案1】:

    我认为您在过程调用中缺少逗号。

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

    【讨论】:

    • 这样的简单错误是最令人沮丧的。谢谢你,圣诞快乐!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多