当我使用mybatis调用存储过程时,如何使返回的结果字符串不映射?

时间:2018-06-28 14:41:39

标签: spring-mybatis

我使用mybatis呼叫sp,

当我定义这样的功能

void submitTransactions(@Param("transactions") List<Transaction> transaction, 
@Param("response") Map<String,String> res);

================================================ ==========================

<select id="submitTransactions" statementType="CALLABLE" parameterType="map" >
     {call MANAGE_APP_TRANSACTIONS(
         NULL, --P_MSG_ID
         NULL, --P_SC_ID
         'ManageAppTransaction', --P_FUN_ID
         'ONLINE', --P_USER_ID
         'E', --P_PREF_LANG
         NULL, --P_RQ_MODE
         NULL, --P_CLIENT_DATE
         NULL, --P_VERSION
         #{response.responseStatus,javaType=String,jdbcType=VARCHAR,mode=OUT},  --P_STATUS_CODE
         #{response.statusDesc,javaType=String,jdbcType=VARCHAR,mode=OUT}, --P_STATUS_DESC

         #{transactions,javaType=List,jdbcType=ARRAY,mode=IN,jdbcTypeName=APP_TRANSACTION_ARRAY,typeHandler=com.ejada.staripo.dao.TransactionArrayTypeHandler} --P_APP_TRNS_LIST
    )}
</select>

responseStatus和statusDesc正确返回,但是当我定义类似的函数时

void submitTransactions(@Param("transactions") List<Transaction> transaction, 
@Param("responseStatus") String responseStatus , @Param("statusDesc") String 
statusDesc);

================================================ ==========================

</select>
    <select id="submitTransactions" statementType="CALLABLE" parameterType="map" resultType="java.lang.String">
     {call MANAGE_APP_TRANSACTIONS(
         NULL, --P_MSG_ID
         NULL, --P_SC_ID
         'ManageAppTransaction', --P_FUN_ID
         'ONLINE', --P_USER_ID
         'E', --P_PREF_LANG
         NULL, --P_RQ_MODE
         NULL, --P_CLIENT_DATE
         NULL, --P_VERSION
         #{responseStatus,javaType=String,jdbcType=VARCHAR,mode=OUT},  --P_STATUS_CODE
         #{statusDesc,javaType=String,jdbcType=VARCHAR,mode=OUT}, --P_STATUS_DESC

         #{transactions,javaType=List,jdbcType=ARRAY,mode=IN,jdbcTypeName=APP_TRANSACTION_ARRAY,typeHandler=com.ejada.staripo.dao.TransactionArrayTypeHandler} --P_APP_TRNS_LIST
    )}
</select>

responseStatus和statusDesc不返回,为什么?

1 个答案:

答案 0 :(得分:0)

在调用submitTransactions的地方,为输出参数传递2个变量(可能为null,但无论如何)。那么,如何从内部范围更新在外部范围中声明的变量?这不是带有字符串*的C ++。 需要间接访问,这就是为什么您需要提供映射(或任何对象)以将指针保持在输出参数的目标上的原因。