[인강노트 - querydsl] 2. 프로젝트 환경설정

봄도둑·2022년 12월 26일
0

김영한님의 실전! querydsl 강의 내용을 정리한 노트입니다. 블로그에 있는 자료를 사용하실 때에는 꼭 김영한님 강의 링크를 남겨주세요!

1. spring boot 패키지 생성


2. querydsl gradle 추가

  • gradle 전체 구문(sprig boot 2.6 이상일 경우, querydsl은 5.0 이상 버전을 지정해 사용함)
    buildscript {
    	ext {
    		queryDslVersion = "5.0.0"
    	}
    }
    plugins {
    	id 'org.springframework.boot' version '2.6.2'
    	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    	//querydsl 추가
    	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
    	id 'java'
    }
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '17'
    configurations {
    	compileOnly {
    		extendsFrom annotationProcessor
    	}
    }
    repositories {
    	mavenCentral()
    }
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.4.1'
    	//querydsl 추가
    	implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    	annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
    	compileOnly 'org.projectlombok:lombok'
    	annotationProcessor 'org.projectlombok:lombok'
    	//테스트에서 lombok 사용
    	testCompileOnly 'org.projectlombok:lombok'
    	testAnnotationProcessor 'org.projectlombok:lombok'
    	testImplementation('org.springframework.boot:spring-boot-starter-test') {
    		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    	}
    }
    test {
    	useJUnitPlatform()
    }
    //querydsl 추가 시작
    def querydslDir = "$buildDir/generated/querydsl"
    querydsl {
    	jpa = true
    	querydslSourcesDir = querydslDir
    }
    sourceSets {
    	main.java.srcDir querydslDir
    }
    configurations {
    	querydsl.extendsFrom compileClasspath
    }
    compileQuerydsl {
    	options.annotationProcessorPath = configurations.querydsl
    }
    //querydsl 추가 끝

3. 큐타입 생성 체크

다음 Hello 라는 entity 하나를 만들어보자

@Entity
@Getter
@Setter
public class Hello {

    @Id @GeneratedValue
    private long id;
}

querydsl은 빌드 시 큐 타입을 먼저 뽑아내고 쭉 빌드하기 시작

이후 build 파일을 확인해보면 뭔지 모르겠지만 QHello라는 뭔가가 만들어짐

→ entity Hello를 querydsl이 Qhello라는 걸 만들어줌

  • 그런데 이렇게 생성된 Q파일은 git에다가 올려서 관리하면 안됨 → 이런 건 시스템이 자동으로 생성해주는 것이기 때문에 올리면 안됨(물론 ignore 처리가 되어 있긴 함)

일단 코드가 잘 동작하는지 테스트 코드를 넣어보자

import org.assertj.core.api.Assertions;

@SpringBootTest
@Transactional
class QuerydslApplicationTests {

	@Autowired
	EntityManager em;

	@Test
	void contextLoads() {
		Hello hello = new Hello();
		em.persist(hello);

		JPAQueryFactory query = new JPAQueryFactory(em);
		QHello qHello = new QHello("h");
//		QHello qHello = QHello.hello;
//    요런식으로 사용 가능

		Hello result = query
				.selectFrom(qHello)
				.fetchOne();

		Assertions.assertThat(result).isEqualTo(hello);
	}

}

4. yml 설정

이제 yml 설정을 해보자

spring:
#  db 세팅
  datasource:
    url: jdbc:mariadb://localhost:3306/query_dsl
    username: root
    password: password
    driver-class-name: org.mariadb.jdbc.Driver
#  jpa 설정

  jpa:
    hibernate:
#      project 재실행 시 테이블 전부 드랍하고 새로 만듬 -> crate
      ddl-auto: create
    properties:
      hibernate:
#        sql을 볼 수 있음
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
#    hibernate에 실행하는 쿼리가 로그 레벨로 출력

gradle에 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' 를 추가하면 쿼리 로그를 살펴볼 수 있음

profile
Java Spring 백엔드 개발자입니다. java 외에도 다양하고 흥미로운 언어와 프레임워크를 학습하는 것을 좋아합니다.

0개의 댓글