2010-03-06 1 views
2

iBatis + Spring을 집중적으로 사용합니다. 우리가 DB에서 얻는 모든 것은 저장 프로 시저를 통해 가져온다. 때때로 문제를 해결할 때 실행 된 SP 및 SP 이름으로 전송 된 정확한 매개 변수를 알고 싶습니다. 현재 우리는 코드를 디버깅하여이를 수행합니다 (통증). iBatis에 일종의 로깅을 추가하여 SP + 매개 변수 값의 이름을 인쇄합니다. 우리는 log4j를 사용하고 다음은 우리의 iBatis 구조입니다. 이 매개 변수가 단지 HashMap에 보듯이 DAO로그인하는 방법 iBatis ORM

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

에서 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 

:

매핑. HashMap과 프로 시저 이름을 매개 변수로 취하고 hashmap의 모든 키/값 쌍과 로그에 프로 시저 이름을 인쇄하는 클래스 + 메서드를 만들 수 있습니다. 그러나, 내가 이것을한다면 ... SP에 전화하기 전에 모든 DAO에 그 전화를 추가해야 할 것입니다.

더 간단한 해결책이 있습니까? 그게 내 모든 코드를 다시 만지는 것을 피할 수 있을까?

답변

0

저는 iBatis와 Spring을 꽤 광범위하게 사용했고 일반적으로 java.sql. * 클래스의 DEBUG 로깅 레벨을 높였습니다.

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

이것은 SQL과 파라미터 플레이스 홀더에 전달되는 값을 모두 기록합니다 나는 일반적으로 log4j.properties에서 이런 일을한다.

+0

hmm이 작업을 수행하려면 log.debug ("....")를 추가해야합니까? – Omnipresent

+1

아니요. 디버그 문은 java.sql. * 클래스에 이미 있습니다. Log4J를 구성하거나 로깅에 사용하는 클래스에 대해 DEBUG를 사용하기 만하면됩니다. – digitalsanctum