MyBatis完整注释配置在OUT参数中检索存储过程结果?

时间:2015-12-17 17:22:53

标签: java mybatis ibatis spring-mybatis

我们有一个Oracle存储过程,它在SYS_REFCURSOR类型OUT参数中返回其结果。我们想通过MyBatis映射器调用它,@Select注释中查询字符串的相关部分如下所示

@Select(value="call " + SCHEMA_NAME + "." + STORED_PROCEDURE_NAME +
      "(" + ...
      "#{" + P_RECORDSET_FIELD + ",javaType=java.sql.ResultSet,jdbcType=CURSOR,mode=OUT,resultMap=ownNameSpace.ownResultMap}," + 
       ...

其中resultMap属性引用以下XML配置

<mapper namespace="ownNameSpace">
  <resultMap id="ownResultMap" type="com.ownpackage.OwnResultType">
    <result column="COLUMN_1" property="property1" />
    ...

这非常有效,DAO类使用映射器从DB中成功检索到了预期的结果。但是我们想知道是否有可能在没有XML的情况下使用注释来解决这个问题。 MyBatis有@ Results / @ Result / @ ResultMap注释,我们成功地将其用于带有ResultSet的SP,但到目前为止,我们无法真正找到OUT参数的解决方案。类似的例子通常归结为使用混合注释+ XML配置。例如。以下教程的作者似乎也遇到了同样的问题,虽然它已经存在了几年:https://dzone.com/articles/ibatis-mybatis-working-stored(参见第四个例子的注释)这是否可行?

2 个答案:

答案 0 :(得分:0)

/ *您需要做的就是声明结果类型,请参阅下面的示例* /

Section 1
item1
item2
Section 2
item5

答案 1 :(得分:0)

尝试这样。

@Select(value = "{ CALL getTotalCityStateId(" +
        "#(stateCursor, mode=OUT, jdbcType=CURSOR," +
        "javaType=java.sql.ResultSet,resultMap = StageCursorMap } )}")
@Options(statementType = StatementType.CALLABLE)
@ResultType(State.class)
@Results(id = "StageCursorMap",
        value = {
                @Result(property = "id", column = "state_id"),
                @Result(property = "name", column = "state_name"),
                @Result(property = "code", column = "state_code"),
        })
public void callGetStatesAnnotations(State state);

如果必须传递IN参数,请使用

Map<String, Object> params = new HashMap<String, Object>();

然后将参数传递给

public void callGetStatesAnnotations(params)