혼자 공부중

JPA 쓰면 답답한 점 : org.hibernate.type :trace로 해결

onnnzeoz 2024. 6. 7. 22:50

JPA를 쓰면 

SQL 나가는거랑 데이터베이스 커넥션 가져오는 것들 어느 타이밍에 가져오는건지 잘 모르겠음

파라미터를 로그에 찍어줄 때도 ?로 찍어줌

insert into
member
(id, username)
values
(default, ?)
 
이것을 극복하기 위해 -> 쿼리 파라미터 로그로 남기는 라이브러리
org.hibernate.type :trace
logging:
  level:
    org.hibernate.SQL: debug #sql문을 logger로 보는거
    org.hibernate.type : trace

 

하고나면

이렇게

저 끝에 파라미터로 뭘 줬는지 나타냄

    insert 
    into
        member
        (id, username) 
    values
        (default, ?)
2024-06-07 22:20:52.714 TRACE 19560 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [memberA]

 

 

좀 더 자세하게 보고싶다면 외부 라이브러리 사용

com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6

build.gradle에 추가해주기

 

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
	
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

 

설정에 넣어주고 나면 이렇게 로그에 값이 더 실제 데이터처럼 찍힘

 

2024-06-07 22:48:54.655  INFO 22108 --- [           main] p6spy                                    : #1717768134655 | took 8ms | statement | connection 3| url jdbc:h2:tcp://localhost/~/jpashop
insert into member (id, username) values (default, ?)
insert into member (id, username) values (default, 'memberA');