網上大多是ibats對oracle存儲過程和函數的配置,由於oracle驅動支持在java代碼中用call調用function,所以網上的配置也是正確的:
<parameterMap id="CommandDeleteById" class="java.util.Map">
<parameter property="result" jdbcType="VARCHAR"
javaType="java.lang.String" mode="OUT" />
<parameter property="commandId" jdbcType="NUMBER"
javaType="java.lang.Integer" mode="IN" />
<parameter property="commandsetId" jdbcType="NUMBER"
javaType="java.lang.Integer" mode="IN" />
<parameter property="dbId" jdbcType="NUMBER"
javaType="java.math.BigDecimal" mode="IN" />
</parameterMap>
<procedure id="Command_deleteById"
parameterMap="CommandDeleteById">
{ ? = call truleadmin.DeleteCommand(?,?,?)}
</procedure>
但是mysql是不支持call function這種寫法的,我估計在配置文件中這樣寫也會報錯(沒有測試上面的方法是否有效)。
其實ibats 調用 mysql的function是非常簡單的,mysql也有dual這個保留字,所以我們可以想象用select functionname() result from dual這樣的寫法獲得function的返回值,那ibats配置文件就完全可以用<select></select>去調用function。
如此簡單的方法,估計將數據庫換成oracle也是同樣適用的!(mysql測試OK,oracle估計問題不大,沒有進行測試)