김영한님의 실전! querydsl 강의 내용을 정리한 노트입니다. 블로그에 있는 자료를 사용하실 때에는 꼭 김영한님 강의 링크를 남겨주세요!
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 추가 끝
다음 Hello 라는 entity 하나를 만들어보자
@Entity
@Getter
@Setter
public class Hello {
@Id @GeneratedValue
private long id;
}
querydsl은 빌드 시 큐 타입을 먼저 뽑아내고 쭉 빌드하기 시작
이후 build 파일을 확인해보면 뭔지 모르겠지만 QHello라는 뭔가가 만들어짐
→ entity Hello를 querydsl이 Qhello라는 걸 만들어줌
일단 코드가 잘 동작하는지 테스트 코드를 넣어보자
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);
}
}
이제 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'
를 추가하면 쿼리 로그를 살펴볼 수 있음