2016-12-20 12 views
0

この問題ではStackOverflowに関するいくつかの質問を見てきましたが、意味があるものは見つかりませんでした。 This oneは最も近い値になりますが、関数から戻り値を取得する方法は示されていません。ここでMybatisを使用したOracle関数からの戻り値

は私のマッパーの呼び出しです:

public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments); 

はここでマッパXMLです:

<select id="callMyFunction" parameterType="map" statementType="CALLABLE" resultType="java.lang.Long"> 
    { #{resultId,javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call MYSCHEMA.MYPACKAGE.my_function(
    #{recordId,jdbcType=NUMERIC,mode=IN}, 
    #{otherId,jdbcType=NUMERIC,mode=IN}, 
    #{date,jdbcType=DATE,mode=IN}, 
    #{comments,jdbcType=VARCHAR,mode=IN})} 
</select> 

呼び出しが動作しますが、戻り値(するresultId)は常にnullです。

誰かが問題を発見できますか?

+0

long(オブジェクトラッパー)ではなく、recordId、javaType = long(ネイティブタイプ)で試しましたか? –

答えて

1

あなたが直接結果を返すようにしたい場合は、SQLの呼び出しでなければなりません: SELECT MYSCHEMA.MYPACKAGE.my_function(...)

あなたがプロシージャコールのスタイルで関数を呼び出すことで保持する場合は、その結果はOUT パラメータであることを意味し(あなたはそれをOUTと宣言しています)。 最小変化はマッパーメソッドシグネチャにパラメータを追加することで構成されます:XMLで public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments, @Param("resultIdContainer") Map<String, Long> resultIdContainer);

Sを選択するためのresultTypeとを忘れ、これはあります。そしてコール: { #{resultIdContainer.resultId, javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call ...

ない私はここにresutlIdを格納するためのマップを使用すること:間接が必要となります。この関数は、あなたが(あなたのマッパーの呼び出しの後に)後で読むことができますどこかのパラメータ「結果」の値を書き込みます、あなたまた、resultIdプロパティを持つクラスを使用することもできます。

+0

それは私が必要としていたものでした。とてもありがとう! – user1071914

関連する問題