반응형
지난글 JPA 프로젝트에 이어서 Querydsl까지 진행해보자!
이 글에서 작성된 모든 소스는 github에 올려두었습니다.
Querydsl 세팅은 허들이 있다고 생각한다. 최대한 자세히 정리해보도록 노력할 것입니다.
Gradle ( version 6.6 )
querydsl은 gradle 버전에 따라서 세팅하는 값이 다릅니다. 이 글에서는 version 5.0 이상일 기준으로 작성하겠습니다.
plugins {
id 'org.springframework.boot' version '2.3.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'mysql:mysql-connector-java'
implementation 'com.querydsl:querydsl-jpa'
implementation 'com.querydsl:querydsl-apt'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
test {
useJUnitPlatform()
}
def querydslSrcDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslSrcDir
}
sourceSets {
main.java.srcDirs querydslSrcDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
plugins
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
- querydsl에서 필요한 Q클래스를 생성해주는 plugin입니다.
- Entity기반으로 Q클래스를 생성합니다.
dependencies
DataBase 관련 dependencies
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'mysql:mysql-connector-java'
implementation 'com.querydsl:querydsl-jpa'
implementation 'com.querydsl:querydsl-apt'
- Querydsl은 JPA 기반이므로 추가
- JPA로 요청하면 내부에서 JDBC를 통해 DB와 커넥션 맺기 때문에 추가
- mysql을 사용했으므로 추가
- querydsl을 사용하기 위해 추가
apt는 이전글에 정리해놨습니다. 참조해주세요.
Querydsl 설정
def querydslSrcDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslSrcDir
}
sourceSets {
main.java.srcDirs querydslSrcDir
}
// 여기부터 gradle 5.0 이후로 추가
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
- querydsl 플러그인 task를 실행했을 때 Q클래스 파일 위치 지정해주는 설정입니다.
application.yaml
spring:
profiles:
active: local
--- #local
spring:
profiles: local
datasource:
url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
username: root
password: vnfmsqka0727!
driver-class-name: com.mysql.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
database: mysql
generate-ddl: false
open-in-view: false
show-sql: true
hibernate:
ddl-auto: # 항상 조심!!
properties:
hibernate:
show_sql: true
format_sql: true
use_sql_comments: true
logging:
level:
org:
hibernate:
SQL: DEBUG
type:
trace
- datasource : database 설정값을 세팅한다.
- jpa.database-platform : platform 설정
- jpa.open-in-view : 영속성을 어느 범위까지 설정할지 결정. 참조
- jpa.show-sql : 실행하는 쿼리 show
- jpa.hibernate.ddl-auto: 톰캣 기동할 때 어떤 동작을 할지 결정
- 해당 설정을 잘못하면 테이블이 drop될수 있다.
- 한 번 설정이 끝났다면 none, validate 로 설정하는 것을 추천한다.
- jpa.properties.hibernate.format_sql : 쿼리를 이쁘게 보여준다.
- logging.level.org.hibernate.SQL : 로그 레벨 설정
Configuration
package com.example.queyrdsl.configuration;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Configuration
public class DataBaseConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
jpa기반이기 때문에 설정과 동일합니다.
Repository
package com.example.queyrdsl.repository;
import com.example.queyrdsl.entity.Staff;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StaffRepository extends JpaRepository<Staff, Long> {
}
package com.example.queyrdsl.repository;
import com.example.queyrdsl.entity.Store;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StoreRepository extends JpaRepository<Store, Long> {
Store findByName(String name);
}
JPA와 동일합니다.
여기까지 동일 세팅입니다.
Entity 관계 매핑이 되어 있는 경우와 안되어있는 경우로 2가지 경우로 작성하겠습니다.
- Entity 관계 매핑이 되어 있는 경우는 Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 ) 을 참조해주세요.
- Entity 관계 매핑이 안되어 있는 경우는 Querydsl 사용해보자. ( Entity 관계 매핑 X편, 테스트 코드 포함 )을 참조해주세요.
반응형
'Develop > spring-data' 카테고리의 다른 글
Spring Data JPA 기반 Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 ) (0) | 2020.11.08 |
---|---|
Spring Data JPA 기반 Querydsl plugin 실행방법 (0) | 2020.11.07 |
Spring Data JPA 기반 Querydsl란? (0) | 2020.11.06 |
JPA 테스트 코드로 알아보자! (0) | 2020.11.05 |
Spring Data JPA 시작 그리고 예제 (1) | 2020.11.05 |