存储过程输出参数由 iBATIS 设置回 POJO

2022-09-02 11:04:05

我正在使用iBATIS在MSSQL服务器上调用存储过程,输入参数是放置在映射中的POJO上的属性:

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

所有参数都正确设置为过程的输入,因此没有任何错误。但是其中一个参数是输出参数,我本来希望它被设置回POJO,但相反,iBATIS放置了一个额外的映射。以下是映射的简化版本,显示了基本思想:"obj.new"=false

    <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中有两个映射传递给iBATIS:

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

现在我看到iBatis文档“执行存储过程时 - iBATIS将为OUTPUT参数创建对象”,因此这是有道理的。但我的问题是,如果有一种方法可以指示iBATIS在调用过程后将布尔值放回POJO?我宁愿不做额外的工作,从地图中获取价值并将其设置为POJO我自己。

乌伦


答案 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>

答案 2

推荐