mybatis調用存儲過程時需要指定statementType=”CALLABLE”,這樣Mybatis內部中調用sql語句時,將采用CallableStatementHandler,而CallableStatementHandler內部將使用CallableStatement來調用存儲過程。如果存儲過程是有參數的,需要指定mode屬性,可選值有IN、OUT和INOUT。當mode為OUT或INOUT時必須同時指定jdbcType。示例如下:
<select id="findName" statementType="CALLABLE"> {call findName( #{username, mode=IN}, #{name, mode=OUT, jdbcType=VARCHAR} )} </select>
存儲過程調用完成后會把輸出參數賦值給入參,所以可以通過Map或實體類來接收輸出參數,比如這里的name。所以針對上述存儲過程調用,可以在Mapper接口中定義如下方法:
/** * 參數和結果都在params中 * @param params */ void findName(Map<String, Object> params);
在上述示例中,Map類型的params參數中需要有key為username的參數,調用完成后會把輸出參數name存入到params這個Map中。當然了我們也可以通過實體類來作為入參的傳遞者和結果的接收者。示例如下:
/** * 參數和結果都包裝為一個User對象 * @param user */ void findName(User user);
參考
原文:https://blog.csdn.net/elim168/article/details/78445755