Spring/QueryDSL

스프링 부트 설정 - JPA, DB

느리지만 꾸준하게 2022. 4. 19. 20:10

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