iBatis + Spring を集中的に使用します。DB から取得するものはすべて、ストアド プロシージャを介してフェッチされます。問題のトラブルシューティングを行う際に、SP に送信された正確なパラメーターと実行された SP の名前を知りたいことがあります。現在、コードをデバッグすることでこれを行っています (これは面倒です)。SP の名前 + パラメータ値を出力するように、iBatis にある種のロギングを追加したいと考えています。私たちは log4j を使用しており、以下は iBatis 構造です。
マッピング:
<procedure id="getReportData" parameterMap="getReportDataCall">
{call get_rpt (?,?,?,?)}
</procedure>
<parameterMap id="getReportDataCall" class="map">
<parameter property="type" jdbcType="String" javaType="java.lang.String" mode="IN"/>
<parameter property="month" jdbcType="Int" javaType="java.lang.Integer" mode="IN"/>
<parameter property="Result0" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="result1"/>
<parameter property="Result1" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="result2"/>
</parameterMap>
<resultMap id="select-first-result-hq" class="VO">
<result property="column1" column="columna"/>
<result property="column2" column="columnb"/>
</resultMap
DAO から iBatis を呼び出す
HashMap parm = new HashMap ();
parm.put("type", type_val);
parm.put("month", month_val);
getSqlMapClientTemplate().queryForList("mymappingName.getReportData", parm);
ご覧のとおり、パラメーターはHashMap
. HashMap
およびプロシージャ名をパラメータとして取り、ハッシュマップとプロシージャ名のすべてのキーと値のペアをログに出力する独自のクラス+メソッドを作成できます。ただし、これを行うと... SP を呼び出す前に、その呼び出しをすべての DAO に追加する必要があります。
これに対するより簡単な解決策はありますか?すべてのコードに再び触れるのを避けることができますか?