首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要在OUT参数中检索存储过程结果的MyBatis完整注释配置吗?

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

Stack Overflow用户
提问于 2015-12-18 01:22:53
回答 2查看 3.6K关注 0票数 2

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

代码语言:javascript
复制
@Select(value="call " + SCHEMA_NAME + "." + STORED_PROCEDURE_NAME +
      "(" + ...
      "#{" + P_RECORDSET_FIELD + ",javaType=java.sql.ResultSet,jdbcType=CURSOR,mode=OUT,resultMap=ownNameSpace.ownResultMap}," + 
       ...

其中resultMap属性指的是以下XML配置

代码语言:javascript
复制
<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参数的解决方案。类似的示例通常归结为使用混合的annotations+XML配置。例如,下面教程的作者似乎被同样的问题困扰着,尽管它已经有几年的历史了:https://dzone.com/articles/ibatis-mybatis-working-stored (参见注释中的第四个例子)这是可行的吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-23 01:55:53

试着这样..。

代码语言:javascript
复制
@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参数,请使用

代码语言:javascript
复制
Map<String, Object> params = new HashMap<String, Object>();

然后将参数传递给

代码语言:javascript
复制
public void callGetStatesAnnotations(params)
票数 2
EN

Stack Overflow用户

发布于 2016-05-28 03:55:00

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

代码语言:javascript
复制
@Select(value= "{ CALL getTotalCityStateId()}")
@Options(statementType = StatementType.CALLABLE)
@ResultType(State.class)
@Results(
{   
 @Result(property="id", column="state_id"),
 @Result(property="name", column="state_name"),
 @Result(property="code", column="state_code"),
})
List<State> callGetStatesAnnotations();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34340628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档