2

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 に追加する必要があります。

これに対するより簡単な解決策はありますか?すべてのコードに再び触れるのを避けることができますか?

4

1 に答える 1

0

私は iBatis と Spring もかなり広範囲に使用しており、通常は java.sql.* クラスのロギング レベルを DEBUG に上げています。私は通常、log4j.properties で次のようなことを行います。

log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

これにより、パラメーター プレースホルダーに渡される sql と値の両方がログに記録されます。

于 2010-03-07T00:21:01.917 に答える