2010-03-18 79 views
20

设置回POJO我使用iBATIS调用存储过程MSSQL Server上,输入参数都在被付诸地图POJO属性:存储过程的输出参数通过iBATIS的

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

所有参数被正确设置为程序的输入,所以没有错。但其中一个参数是一个输出参数,我期待它被设置回POJO,但是一个额外的映射"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> 

调用我有两个映射在地图的过程后传给iBATIS的:

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

现在我看到iBatis documentation表示“执行存储过程res - iBATIS将为OUTPUT参数“”创建对象,所以它很有意义。但我的问题是,如果有方法指示iBATIS在调用过程后将布尔值返回给POJO?我宁愿不做额外的工作,从地图中获取价值,并将其设置为我自己的POJO。

//Uhlén

+0

我发现杰夫·巴特勒回答这个杰夫·巴特勒回答这个http://groups.google.com/group/mybatis-user/browse_thread/thread/14826bc31c9f143d职位是非常有帮助的,当我遇到了类似的问题(尽管使用select语句而不是更新) – 2011-05-24 20:41:46

回答

1

您可以使用一个明确的参数图。请参阅Page 21 of the manual

它过于冗长,但它为我工作。

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