iBatisを使用してストアド・プロシージャを呼び出す場合のXMLファイル構成
iBatis(現在myBatisに改名されている)は、「半自動化」されたORMツール(sql-mapperを介して)と見なすことができ、あるいはより厳密にはJDBC APIに関する強力なパッケージである.簡単で学びやすいのが利点です.これは、多くのプロジェクトでiBatisを使用する傾向があり、特に複雑なクエリーやレポート機能を多く提供するアプリケーションでは、なぜですか.
<>この本では、iBatisの様々な使い方について説明していますが、著者は特に、Dataaccessという層では、ストレージプロセスを呼び出すことで逆モードであり、使用を推奨しないことを強調しています.そこでiBatisを介してストレージ・プロシージャを呼び出すことについては、非常に簡単なものにすぎません.
しかし、ストレージ・プロシージャを使用する場合も多くあります.ストレージ・プロシージャ自体について、Oracleストレージ・プロシージャを例に挙げると、jdbcトランザクションで、前後依存ステップが複数ある複雑なデータベース・アクセスを完了することができ、アプリケーションとデータベース間の往復通信を削減できます.
ここでは、Oracleデータベースを例に、iBatisを使用してOracleストレージ・プロシージャを呼び出す際の構成の考え方について説明します.ここでは、この文書を読んだ人がiBatisの使用経験があると仮定し、詳細な説明を省略することができます.
Oracleストアド・プロシージャ・インタフェースを参照してください.
これに対応して、ibatisのxmlプロファイルでは、このストレージ・プロシージャに対して呼び出される構成は、以下のように構成される.
上記のコードには2つの点が含まれています.idは「map_r_process_order」であり、入力パラメータとOracleストレージ・プロシージャ・インタフェース・パラメータとのマッピング関係を宣言し、順序に従って対応します.
idは、「r_process_order」のストレージプロシージャ呼び出しを実行する.ストアドプロシージャのINパラメータタイプとOUTパラメータタイプは、合計13個ですので?番号の個数も13で、順番に対応しています.
Javaコードはここで省略します:基本的に、比較的簡単な方法は、INとOUTタイプに対して、2つのVOオブジェクトを用意して、それぞれストレージプロセスの転送パラメータと転送パラメータを包装します.
入力パラメータのプロパティ構造は簡単です.
flag(integer)、msg(String)、複合タイプなどの基本タイプも含む出力パラメータ.ここでorderItemListは、jdbcTypeをORACLECURSORと指定すると、ResultSetとPOJOのデータバインド(ここでのPOJOはOrderItem)を自動的に完了させるために、ストレージ・プロシージャがカーソルでList結果セットを返すことを望んでいることを示します.もちろん、ここではカーソル・ロー・セットの各ローとOrderItemとのマッピング関係を記述するresultMapを提供する必要があります.
<
しかし、ストレージ・プロシージャを使用する場合も多くあります.ストレージ・プロシージャ自体について、Oracleストレージ・プロシージャを例に挙げると、jdbcトランザクションで、前後依存ステップが複数ある複雑なデータベース・アクセスを完了することができ、アプリケーションとデータベース間の往復通信を削減できます.
ここでは、Oracleデータベースを例に、iBatisを使用してOracleストレージ・プロシージャを呼び出す際の構成の考え方について説明します.ここでは、この文書を読んだ人がiBatisの使用経験があると仮定し、詳細な説明を省略することができます.
Oracleストアド・プロシージャ・インタフェースを参照してください.
PROCEDURE r_process_order(is_oid IN VARCHAR2, --
is_taskid in varchar2, --
is_price in number, --
is_gap in number, --
is_notes in varchar2, --
is_timelimit in number, --
is_userid in varchar2, --
is_deptid in varchar2, -- id
oi_flag OUT INTEGER, --0 -1
os_msg OUT VARCHAR2, --
os_finish out varchar2, -- 0 1
or_order_item_list out sys_refcursor, --
or_task_item_list out sys_refcursor, --
or_userlist out sys_refcursor --
);
これに対応して、ibatisのxmlプロファイルでは、このストレージ・プロシージャに対して呼び出される構成は、以下のように構成される.
<!-- : -->
<parameterMap id="map_r_process_order" class="doRfqReply">
<parameter property="orderId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="taskId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="price" jdbcType="DOUBLE" javaType="java.math.BigDecimal" mode="IN" />
<parameter property="gap" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="notes" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="userId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="deptId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="flag" jdbcType="INTEGER" javaType="int" mode="OUT" />
<parameter property="msg" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
<parameter property="strFinish" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
<parameter property="orderItemList" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"
resultMap="orderItemListResult" />
<parameter property="taskItemList" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"
resultMap="taskItemListResult" />
<parameter property="processUserIds" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"
resultMap="processUserId" />
</parameterMap>
<procedure id="r_process_order" parameterMap="map_r_rfq_reply">
{ call p_foo_bar_manager.r_process_order(?,?,?,?,?,?,?,?,?,?,?,?,?)}
</procedure>
上記のコードには2つの点が含まれています.idは「map_r_process_order」であり、入力パラメータとOracleストレージ・プロシージャ・インタフェース・パラメータとのマッピング関係を宣言し、順序に従って対応します.
idは、「r_process_order」のストレージプロシージャ呼び出しを実行する.ストアドプロシージャのINパラメータタイプとOUTパラメータタイプは、合計13個ですので?番号の個数も13で、順番に対応しています.
Javaコードはここで省略します:基本的に、比較的簡単な方法は、INとOUTタイプに対して、2つのVOオブジェクトを用意して、それぞれストレージプロセスの転送パラメータと転送パラメータを包装します.
入力パラメータのプロパティ構造は簡単です.
flag(integer)、msg(String)、複合タイプなどの基本タイプも含む出力パラメータ.ここでorderItemListは、jdbcTypeをORACLECURSORと指定すると、ResultSetとPOJOのデータバインド(ここでのPOJOはOrderItem)を自動的に完了させるために、ストレージ・プロシージャがカーソルでList