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