2010-03-06 25 views
2

我們密集使用iBatis + Spring。我們從數據庫中獲取的所有內容均通過存儲過程獲取。在解決問題時,我們想知道發送給執行的SP和SP名稱的確切參數。目前我們通過調試代碼來做到這一點(這很痛苦)。我們想添加一些記錄到iBatis,以便輸出SP +參數值的名稱。我們使用log4j,以下是我們的iBatis結構。如何在iBatis ORM中登錄

映射:

<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

HashMap parm = new HashMap(); 
parm.put("type", type_val); 
parm.put("month", month_val); 
getSqlMapClientTemplate().queryForList("mymappingName.getReportData", parm); 

調用iBatis的正如你所看到的參數只是在HashMap。我可以創建一個我自己的類+方法,它將HashMap和過程名稱作爲參數,並將hashmap的所有鍵/值對和過程名稱打印到日誌中。但是,如果我這樣做......在打電話給SP之前,我必須將此呼叫添加到所有DAO的呼叫中。

有沒有更簡單的解決方案呢?那會避免我再次觸摸我的所有代碼?

回答

0

我已經使用了iBatis和Spring,並且通常只是將日誌記錄級別設置爲調用java.sql。*類。我一般在log4j.properties中做這樣的事情:

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

這會記錄傳遞給參數佔位符的sql和值。

+0

嗯不要我需要添加log.debug(「....」)這個工作? – Omnipresent 2010-03-08 16:01:17

+1

編號調試語句已存在於java.sql。*類中。您只需配置Log4J或任何您用於記錄的內容,以便爲這些類使用DEBUG。 – digitalsanctum 2010-03-09 18:16:40