5
我正在尝试设计一个小的CRUD工具,并且到目前为止,每个方面(Rich Faces UI和托管豆, 验证,mySQL数据库等)都将很好,但不是myBatis的一块。MyBatis映射器调用多个IN参数的PROC
我是比较新的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
我会注意到,我也尝试:
- 创建与变量瓦拉和值Valb并为每个 getter/setter方法一个POJO,
- 制作
parameterType="PojoClass"
在XML中, - 跳过
session.getMapper()
并创建一个PojoClass的实例, - 并调用
session.selectList("getProgress", pojoInstance);
与几乎相同的结果(即错误的参数数量)。
对网络搜索的帮助很少,大部分告诉我要做我认为我已经完成的工作。
像这样的简单错误是最令人沮丧的。谢谢你,圣诞快乐! – cobaltduck 2011-12-24 21:51:30