Mybatis Interceptor QueryLog

MyBatis를 쓰는 프로젝트에서 파라미터 바인딩 쿼리로그 남기기

spring boot 에서 mybatis 사용중 mybatis interceptor를 이용하여 쿼리로그를 남겨보자.

아래 gist는 mybatis query log를 남기는 interceptor 코드다.

아래 코드는 다음과 같은 쓸데없는 의존성이 있다.
java8 기반으로 동작 (BiConsuemer lambda function 사용)
Spring 기반으로 동작(ReflectionUtils, 부모 클래스 field 찾으려고 간편util 사용)
Jackson 의존성 (파라미터를 json으로 출력하기 위함)
Lombok 의존성 (Slf4j)
-- 누군가 이 글을 본다면 부끄럽..

해당 인터셉터를 sqlSesstionFactory에 plugin으로 추가해야됨을 기억하자.

interceptor를 작성 후 테스트 중 parameterMapping 객체의 property 가 “__frch_item0”로 나오는 경우가 있었는데. foreach 같은 MyBatis 동적 SQL로 인해 추가된 파라미터로 보인다.

이 추가된 파라미터의 값을 어디서 찾을 수 있는지 고민했는데.
BoundSql 객체에서 getAdditionalParameter(name)으로 값을 가져올 수 있다.

— 추가

MyBatis 소스중 BaseExcutor.java 코드를 봤을 때 parameteMapping으로 부터 값을 가져오는 코드가 보인다. (createCacheKey 메소드)

참조하여 파라미터 값 얻는 부분을 개선 해보자.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store