티스토리 뷰

ibatis library 를 사용하면 아래와 같이 작성한것과 는 달리 줄바꿈이 사라지고 파라미터는 ? 로 로그에 출력된다. 

ex ) select * from table where id = ? 


이를 기존에 작성했던것과 마찬가지로 줄바꿈 처리하고, 파라미터를 적용한 내용으로 출력하는 방법을 소개하려고한다. 


그러기 위해서는 ibatis library 안에 있는 특정 패키지의 클래스를 수정해주어야하는데... 라이브러리를 수정하는것은 좋지 않다. maven 과 같은 의존성 관리 프로그램을 활용 하고 있으면 더욱 그러하다. (라이브러리를 수정하면 소스 공유 시에 해당 라이브러리를 maven 으로 관리하기 힘들어진다. web library 나 local repository 를 이용해야 할 것이다.)


라이브러리를 수정하지 않고 클래스를 수정하려면  src 아래에 같은 패키지명와 같은 클래스명을 사용하면, 라이브러리에 있는 클래스보다 우선순위가 높아서 해당 클래스를 수정한 것처럼 빌드가 된다. 


(아래 직접 작성한 내용은 복사한게 아니라 직접 타이핑한거라 스펠링이나 오탈자가 있을수 있다.)


1. com.ibatis.common.jdbc.logging.BaseLogProxy 클래스를 src 아래에 복사하고 함수를 추가한다. (아래 함수는 프로시져와 일반 sql 을 테스트하여 출력에 성공하였다. )


protected Strign getFinalQuery (String sql) {

StringBuffer sb  = new StringBuffer();


int parameterIndex = 0;

for(int i = 0; i < sql.length() ; i++ ){

if(sql.charAt(i) == '?'){

if(colummnValues.size() > parameterIndex && colummnValues.get(parameterIndex) != null ){

if(colummnValues.get(parameterIndex).getClass().equals(java.lang.String.class)){

sb.append("'" + colummnValues.get(parameterIndex) + "'");

}else if(colummnValues.get(parameterIndex).getClass().equals(java.lang.Integer.class)){

sb.append(colummnValues.get(parameterIndex));

}

}

parameterIndex += 1;

}else{

sb.append(sql.charAt(i));

}

}

return sb.toString();

}


2. 라이브러리 안에 com.ibatis.common.jdbc.logging.PreparedStatementLogProxy 클래스를 복사하고, 30번째 줄에 removingBreakingWhitespace(this.sql) 대신에 getFinalQuery (this.sql) 를 추가한다.


3. com.ibatis.sqlmap.engine.mapping.sql.stat.StaticSql : line 12 를 this.sqlStatement = sqlStatement 로 변경


4. com.ibatis.sqlmap.engine.mapping.sql.SqlText : line 16 를 this.text = text 로 변경

'DB' 카테고리의 다른 글

Mysql Query log  (0) 2019.05.09
Convert sql from sybase IQ to oracle 12c  (0) 2016.09.11
오라클 고도화  (0) 2016.07.02
mysql 계층 쿼리 정리 및 분석  (0) 2016.03.29
댓글
글 보관함
최근에 올라온 글
Total
Today
Yesterday
링크