有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我也非常广泛地使用了iBatis和Spring,通常只是在日志级别上为java调试。sql.*上课。我通常在log4j中这样做。特性:

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

    这将记录传递给参数占位符的sql和值