我们大量使用 iBatis + Spring。我们从数据库中获得的一切都是通过存储过程获取的。有时在对问题进行故障排除时,我们想知道发送到 SP 的确切参数和执行的 SP 名称。目前我们通过调试代码来做到这一点(这很痛苦)。我们想向 iBatis 添加某种日志记录,以便打印出 SP + 参数值的名称。我们使用 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 中。
有没有更简单的解决方案?那会避免我再次触摸我的所有代码吗?