20

iBATISを使用してMSSQLServerのストアドプロシージャを呼び出しています。入力パラメーターは、マップに配置されるPOJOのプロパティです。

Map<String, Object> saveMap = new HashMap<String, Object>();
saveMap.put("obj", myArticle);
update("save", saveMap);

すべてのパラメータはプロシージャへの入力として正しく設定されているため、問題はありません。しかし、パラメーターの1つは出力パラメーターであり、POJOに戻されることを期待していましたが、代わりに1つの追加"obj.new"=falseのマッピングがiBATISによってマップに配置されます。これは、基本的な考え方を示すマッピングの簡略化されたバージョンです。

    <procedure id="save">
    {<include refid="Core.returned_value" />
    CALL SPRC_ARTICLE_NAME_SAVE (
        <include refid = "Core.common_fields" />
        @pArticle_id = #obj.art_id#
    ,   @pArtname = #obj.artname#
    ,   @pNewArticleName_flg = #obj.new,mode=INOUT#
    )}
</procedure>

プロシージャを呼び出した後、Mapに2つのマッピングがiBATISに渡されました。

  • "obj"=POJO
  • "obj.new"=False

これで、iBatisのドキュメント「ストアドプロシージャを実行すると、iBATISはOUTPUTパラメータのオブジェクトを作成する」と記載されていることがわかります。これは理にかなっています。しかし、私の質問は、プロシージャが呼び出された後、iBATISにブール値をPOJOに戻すように指示する方法があるかどうかです。マップから値を取得して自分でPOJOに設定するという余分な作業はしません。

//Uhlén

4

1 に答える 1

1

明示的なパラメータマップを使用できます。マニュアルの21ページを参照してください

それはかなり冗長ですが、過去に私のために働いていました。

<parameterMap id="swapParameters" class="map" >
    <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
    <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>

<procedure id="swapEmailAddresses" parameterMap="swapParameters" >
    {call swap_email_address (?, ?)}
</procedure>
于 2011-07-13T00:41:05.573 に答える