我们有一个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(参见第四个例子的注释)这是否可行?
答案 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)