java如何在iBatis ORM中进行日志记录
我们大量使用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
从道中调用iBatis
HashMap parm = new HashMap ();
parm.put("type", type_val);
parm.put("month", month_val);
getSqlMapClientTemplate().queryForList("mymappingName.getReportData", parm);
正如您所看到的,参数就在HashMap
中。我可以自己创建一个class+方法,它将HashMap
和过程名作为参数,并将hashmap的所有键/值对和过程名打印到日志中。然而,如果我这样做。。。在调用SP之前,我必须将该调用添加到所有DAO中
有没有更简单的解决办法?这样可以避免我再次接触所有代码
# 1 楼答案
我也非常广泛地使用了iBatis和Spring,通常只是在日志级别上为java调试。sql.*上课。我通常在log4j中这样做。特性:
这将记录传递给参数占位符的sql和值