본문 바로가기
OpenSource/Mybatis&Ibatis

mybatis 3.1 개발자 local용

by 태하팍 2013. 8. 9.
반응형

 

 

아쉽게 블로그 포스팅을 거의 못하고 있어서...시간 내서 작성을 하려고 합니다^-^good~

오늘의 포스팅은! mybatis logger쪽 입니다.

 

환경 :

Spring 3.1

mybatis-3.1.1.jar

 

서론 :

현재 mybatis에서는 sql문과 parameter 부분이 서로 나뉘어져 logging되고 있습니다.

개발을 할 때 param이 많다면 일일이 매핑 시켜서 오렌지나, sql develop 등등으로 보기에는 너무 힘이 들 것 입니다. 그래서 간단히..mybatis 소스를 조작하여 개발하여 보았습니다만..

개발자 local용이라는 단점이 있습니다. server용은 아닙니다..ㅋㅋ;;

 

        기본 제공                                             변경 후

ex) select * from acetDB                =>    select * from acetDB 

      where 1=1 and aaa in(?. ?)      =>     where 1=1 and aaa in(100. 200)

 

본론 :

어떻게 구현을 했는지..창피하지만...사실 고친것도 없습니다..;;

한번 살펴보겠습니다^-^

 

mybatis 소스 중에 org/apache/ibatis/logging/jdbc 의 패키지 밑에 아래의 소스를 수정하였습니다.

BaseJdbcLogger.java

ConnectionLogger.java

PreparedStatementLogger.java

 

새롭게 만든 소스

PrintQueryParam.java

 

간단히 위의 소스에 대해서 설명을 드리자면..

ConnectionLogger.java  : 요놈이 SQL문을 가지고 있습니다.

PreparedStatementLogger.java : 요놈은 parameter의 값을 가지고 있습니다.

BaseJdbcLogger.java : 요녀석은 ConnectionLogger, PreparedStatementLogger java에서 상속하여 쓰고 있는 Adapter 패턴 처럼 보입니다. 또한 Dynamic Proxy 패턴도 쓰입니다. 오픈소스는 디자인 패턴의 놀이터?? 인 것 같습니다..ㅋㅋ;

 

ex) public final class ConnectionLogger extends BaseJdbcLogger implements InvocationHandler {

           .......................

      }

 

그래서...서로 다른 java와 값들...어떻게 한곳으로 몰아서 작업을 통해서 sql문과 파라미터를 함께 찍어줄수 있을까...고민했습니다...

 

그래서 일단은 개발자 local 즉, 혼자서 개발 시에 사용 할 수 있는 ver을 만들었습니다.

How? 요즘..디자인 패턴을 내부에서 스터디를 하고 있는터라..떠오르는것이..Singleton 패턴 이였습니다--;;

간단히 말하면..

기본적인 Singleton 패턴이며, ConnectionLogger와 PreparedStatementLogger에서 공통의 객체를 공유하되

saveSql 이라는 녀석에다가 쿼리를 ConnectionLogger에서 넣어주게 되고, PreparedStatementLogger에서 쿼리문을 꺼내다가 파라미터와 합치는 작업을 하게 되어집니다.

 

1) PrintQueryParam.java

 

2) ConnectionLogger.java

 

3) PreparedStatementLogger.java

 

4) BaseJdbcLogger.java

 

결론 :

아래의 jar를 기존 mybatis-3.1.1.jar 대신 사용 하면 됩니다.

 

mybatis-3.1.1.aa.local.jar

 

추신 :

서버용은 mybatis plug-in 이라는 것을 사용하여 만들 수 있을 것 같다.

지금은 다른쪽을 해야해서 못하고 있으나..만드는 즉시 포스팅 하도록 하겠습니다.^-^good~

 

- 끝 -

 

 

 

반응형