我们有一个Oracle存储过程,它在SYS_REFCURSOR类型输出参数中返回结果。我们希望通过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参数的解决方案。类似的示例通常归结为使用混合的annotations+XML配置。例如,下面教程的作者似乎被同样的问题困扰着,尽管它已经有几年的历史了:https://dzone.com/articles/ibatis-mybatis-working-stored (参见注释中的第四个例子)这是可行的吗?
发布于 2019-03-23 01:55:53
试着这样..。
@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)发布于 2016-05-28 03:55:00
/*您所需要做的就是声明您的结果类型,参见下面的示例*/
@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();https://stackoverflow.com/questions/34340628
复制相似问题