devtools

MyBatis 로그 → SQL 변환기

Preparing / Parameters 로그를 붙여넣으면 ? 자리에 값을 채운 실행 가능한 SQL로 바꿔줍니다.

MyBatis 로그
실행 SQL

왼쪽에 로그를 붙여넣으면 파라미터가 채워진 SQL이 여기에 나옵니다.

사용법

  1. 콘솔이나 로그 파일에서 ==> Preparing: 줄과 ==> Parameters: 줄을 복사합니다. 앞의 시간·스레드·로거 이름은 지우지 않아도 됩니다.
  2. 왼쪽 입력창에 붙여넣으면 오른쪽에 바로 SQL이 나옵니다. 여러 쿼리를 한꺼번에 넣어도 됩니다.
  3. DB 종류(MySQL·MariaDB·PostgreSQL·Oracle)를 고르면 날짜·불리언·이스케이프 규칙이 맞춰집니다.
  4. 복사 버튼으로 DBeaver, DataGrip, SQL Developer 등에 붙여넣어 바로 실행해보세요.

변환 예시

MyBatis 로그 (입력)

==>  Preparing: SELECT * FROM member WHERE member_id = ? AND status = ? AND deleted_at IS ?
==> Parameters: 1024(Long), ACTIVE(String), null

변환된 SQL (결과)

SELECT * FROM member WHERE member_id = 1024 AND status = 'ACTIVE' AND deleted_at IS NULL;

파라미터 타입별 변환 규칙

타입로그SQL
Integer, Long, BigDecimal …1024(Long)1024
StringPAID(String)'PAID'
작은따옴표 포함O'Brien(String)'O''Brien'
nullnullNULL
Booleantrue(Boolean)TRUE (Oracle: 1)
Timestamp2026-09-01 00:00:00.0(Timestamp)'2026-09-01 00:00:00.0'
Timestamp (Oracle)2026-09-01 00:00:00.0(Timestamp)TO_TIMESTAMP('…', 'YYYY-MM-DD HH24:MI:SS.FF')
Date / LocalDate (Oracle)2026-09-01(LocalDate)TO_DATE('2026-09-01', 'YYYY-MM-DD')

MySQL·MariaDB는 문자열 안의 역슬래시(\)도 이스케이프합니다. byte[] 같은 바이너리 값은 로그에 내용이 남지 않아 경고로 알려드려요.

자주 묻는 질문

Q.어떤 로그를 붙여넣으면 되나요?

MyBatis가 DEBUG 레벨에서 찍는 '==> Preparing:' 줄과 바로 다음 '==> Parameters:' 줄이면 됩니다. 날짜·스레드·로거 이름 같은 앞부분은 그대로 둬도 되고, 여러 쿼리가 섞인 로그를 통째로 붙여넣어도 쿼리별로 나눠서 변환합니다.

Q.로그 자체가 안 찍혀요.

Mapper 인터페이스 패키지의 로그 레벨을 DEBUG로 올리면 됩니다. Spring Boot라면 application.yml에 logging.level.<mapper 패키지>: DEBUG 를 추가하세요. MyBatis 설정의 logImpl을 STDOUT_LOGGING으로 두는 방법도 있습니다.

Q.타입별로 값은 어떻게 들어가나요?

Integer·Long·BigDecimal 같은 숫자 타입은 따옴표 없이, String·Timestamp 등 나머지는 작은따옴표로 감쌉니다. null은 NULL, Boolean은 TRUE/FALSE(Oracle은 1/0)로 바뀝니다. 값 안의 작은따옴표는 ''로 이스케이프합니다.

Q.SQL 안의 문자열이나 주석에 있는 ?도 바뀌나요?

아니요. 작은따옴표·큰따옴표·백틱 문자열과 -- , /* */ 주석 안의 ?는 건너뛰고 실제 바인딩 자리만 채웁니다.

Q.?와 파라미터 개수가 다르다고 나와요.

로그가 중간에 잘렸거나, 멀티스레드 환경에서 다른 요청의 로그 줄과 섞인 경우가 대부분입니다. 같은 스레드 이름의 Preparing/Parameters 두 줄만 골라서 다시 붙여넣어 보세요. 남는 ?는 그대로 둡니다.

JSON 응답을 확인할 땐 JSON Formatter도 같이 써보세요.

Gunmo Lee