MyBatisでストアドプロシージャを実行する
   1 min read

(もしかしたら以前どこかで書いたかも…)

MyBatisでストアドプロシージャを実行する必要に迫られたことがありましたが、オフィシャルリファレンスを見てもどこにもストアドプロシージャについて記述がないので困った記憶をふと思い出しました。

実際には、MyBatisのテストケースにストアドプロシージャは登場します。

  <!-- Important things for stored procedures:
    1. Must set the statement type to CALLABLE
    2. Must use the JDBC standard escape sequence for stored procedures:
       {call xxx (parm1, parm2)}
    3. Must set the MODE of all parameters (IN, OUT, INOUT)
    4. All IN, OUT, and INOUT parameters must be a part of the
       parameterType or parameterMap (discouraged).  The only exception
       is if you are using a Map as a parameter object.  In that case you
       do not need to add OUT parameters to the map before calling, MyBatis
       will add them for you automatically.
    5. resultType or resultMap (more typically) is only used if
       the procedure returns a result set. IMPORTANT: Oracle ref
       cursors are usually returned as parameters, NOT directly
       from the stored proc.  So with ref cursors, resultMap
       and/or resultType is usually not used.
   -->

  <select id="adderAsSelect" parameterType="org.apache.ibatis.submitted.sptests.Parameter" statementType="CALLABLE">
    {call sptest.adder(
      #{addend1,jdbcType=INTEGER,mode=IN},
      #{addend2,jdbcType=INTEGER,mode=IN},
      #{sum,jdbcType=INTEGER,mode=OUT}
    )}
  </select>
(後略)