MyBatis注释调用存储过程并获取Params

时间:2014-07-23 12:43:22

标签: java stored-procedures mybatis out-parameters

我正在使用MyBAtis-3和MyBAtis-Spring。 当我尝试使用MyBatis注释调用一个返回多个params的存储过程时。我没有得到任何东西,我可以看到输入参数传递给日志中的SP,并且它在那里挂起,没有任何进度也没有抛出异常。

PFB我试图从MyBAtis访问的Oracle存储过程,

create or replace PROCEDURE C2C.GET_DATA
(
  "IN_PARAM1" IN NUMBER,
   "OUT_PARAM2" OUT SAMPLETABLE.COL2%TYPE,
   "OUT_PARAM3" OUT SAMPLETABLE.COL3%TYPE,
   "OUT_PARAM4" OUT SAMPLETABLE.COL4%TYPE
  )  AS

  BEGIN
    SELECT PARAM2,PARAM3,PARAM4 INTO 
    OUT_PARAM2,OUT_PARAM3,OUT_PARAM4
    FROM C2C.SAMPLETABLE WHERE PARAM1=IN_PARAM1 ;  

  END C2C.GET_DATA;

PFB映射器接口方法,

@Select(value= "{ CALL  C2C.GET_DATA( #{param1, mode=IN, jdbcType=INTEGER},#{param2, mode=OUT, jdbcType=VARCHAR},#{param3, mode=OUT, jdbcType=INTEGER},#{param4, mode=OUT, jdbcType=INTEGER})}")
@Options(statementType = StatementType.CALLABLE)
public void getData(Test test);

Test对象包含在Stored Procedure Call语句中作为输入传递的参数。

当我执行此操作时,它会挂在这里,

main Slf4jImpl 
==>  Preparing: { CALL C2C.GET_DATA(?,?,?,?)} 

main Slf4jImpl 
==> Parameters: 60(Integer)

1 个答案:

答案 0 :(得分:1)

令人惊讶的是,如果我使用@Insert注释,它会按预期工作。 调用存储过程时有些奇怪的行为。让我知道,除此之外是否有其他人有一个很好的解决方案。