application.properties는 삭제하고 application.yml파일을 만들자.
application.yml 파일
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/querydsl
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
# 애플리케이션 로딩 시점에 테이블을 다 drop하고 다시 생성
# 만약 create-drop을 하면 다시 다 날리고 테이블 만든다음 애플리케이션 내릴때 테이블도 다 날린다.
# 끝나고 테이블 볼수 있는게 없어서 그냥 create로 설정
ddl-auto: create
properties:
hibernate:
# query 이쁘게 보기
# show_sql: true
format_sql: true
logging.level:
org.hibernate.SQL: debug
# org.hibernate.type: trace
querydslApplicationTests를 실행시키면 debug 될때 쿼리가 찍힌다.
package study.querydsl;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Hello;
import study.querydsl.entity.QHello;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import static org.assertj.core.api.Assertions.*;
@SpringBootTest
@Transactional
class QuerydslApplicationTests {
// spring 최신버전
@Autowired
EntityManager em;
// java 표준스펙
// @PersistenceContext
@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory query = new JPAQueryFactory(em);
QHello qHello = QHello.hello;
// querydsl도 잘돌아간다.
Hello result = query
.selectFrom(qHello)
.fetchOne();
assertThat(result).isEqualTo(hello);
// lombok으로 세팅
assertThat(result.getId()).isEqualTo(hello.getId());
}
}
2022-04-19 19:59:07.397 DEBUG 77032 --- [ main] org.hibernate.SQL :
insert
into
hello
(id)
values
(?)
test에 commit을 넣어주고 다시 실행시켜주면
@SpringBootTest
@Transactional
@Commit
실행창에 commit이 뜨면서 h2 db에 ID값이 보이게 된다.
insert
into
hello
(id)
values
(?)
2022-04-19 20:01:48.260 DEBUG 77065 --- [ main] org.hibernate.SQL :
select
hello0_.id as id1_0_
from
hello hello0_
2022-04-19 20:01:48.349 INFO 77065 --- [ main] o.s.t.c.transaction.TransactionContext : Committed transaction for test:
실행창을 보면 insert에 ?가 남는데 궁금하다. 외부 라이브러리를 추가해주자.
application.yml에서 주석처리한 hibernate.type: trace를 넣어주고 다시 돌리면 ?를 볼수가 있다.
logging.level:
org.hibernate.SQL: debug
org.hibernate.type: trace
아래를 보면 ?가 bindparameter값은 1이라고 볼 수가 있다.
insert
into
hello
(id)
values
(?)
2022-04-19 20:05:12.126 TRACE 77153 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1]
2022-04-19 20:05:12.130 DEBUG 77153 --- [ main] org.hibernate.SQL :
select
hello0_.id as id1_0_
from
hello hello0_
그리고 build.gradle에다가 아래 구문을 추가해주자.
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
그러면 p6spy라고 나오면서 한 줄로 깔끔하게 나온다.
2022-04-19 20:08:08.422 TRACE 77213 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1]
2022-04-19 20:08:08.423 INFO 77213 --- [ main] p6spy : #1650366488423 | took 0ms | statement | connection 3| url jdbc:h2:tcp://localhost/~/querydsl
insert into hello (id) values (?)
insert into hello (id) values (1);
<출처 김영한: 실전! QueryDSL >
https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/dashboard
실전! Querydsl - 인프런 | 강의
Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, - 강의 소개 | 인프런...
www.inflearn.com
'Spring > QueryDSL' 카테고리의 다른 글
검색 조건 쿼리 (0) | 2022.04.19 |
---|---|
기본 Q-Type 활용 (0) | 2022.04.19 |
JPQL vs Querydsl (0) | 2022.04.19 |
예제 도메인 모델 동작확인 (0) | 2022.04.19 |
프로젝트 생성 - QueryDSL 설정과 검증 (0) | 2022.04.19 |