Querydsl
정의
Querydsl이란?
Query Domain Specific Language Hibernate Query Language를 타입에 맞게 안전하게 생성 및 관리해주는 Builder Opensource Framework
장점
- java 소스로 쿼리를 작성할 수 있어, 컴파일 시점에 Syntax Error 확인 가능
- IDE의 자동완성 기능 사용 가능
- 복잡한 Query와 동적 Query 작성이 용이함
- Query 작성 시, 제약조건등을 메서드로 추출하여 재사용 가능
Keyword
fetch
- select 쿼리 결과 반환
Method | 기능 |
---|---|
fetch() | 조회 결과 Collection 반환 |
fetchOne() | 조회 결과가 한건일 경우 반환 |
fetchFirst() | 조회 대상에 한건 이상일 경우에 한건만 반환 |
fetchCount() | 개수 조회, Long |
fetchResults() | 조회한 리스트 + 전체 개수를 포함한 QueryResult 객체 반환 |
where
- 대상 테이블 식별 조건
Method | 기능 |
---|---|
eq() | == |
ne() | != |
not() | 앞의 내용 부정 |
isNotNull() | Null 이 아닌지 확인 |
in() | in |
notIn() | not in |
between(a, b) | 크기가 a와 b 사이 인지 |
before() | 시간 전 |
after() | 시간 후 |
goe() | greater than or equal |
gt() | greater than |
loe() | less than or equal |
lt() | less than |
like() | like 문법, 확인 문자열에 %가 있어야 함 |
contains() | like 문법, 문자열 양끝에 % 포함 |
startsWith() | like 문법, 문자열 끝에 % 포함 |
endsWith() | like 문법, 문자열 시작에 %포함 |
Example
String productName = "myProduct";
List<Product> result = queryFactory
.select(product)
.from(product)
.where(product.name.eq(productName), product.price.eq("1000"))
.fetch();
프로젝트 설정
@Configuration
public class QuerydslConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
//build.gradle
project(":rpa-view:view-core") {
apply plugin: "eclipse-wtp"
dependencies {
lib."spring-data-jpa",
lib."querydsl-jpa",
lib."querydsl-apt",
lib."querydsl-core"
...
annotationProcessor "com.querydsl:querydsl-apt:4.2.1:jpa"
annotationProcessor lib."persistence-api"
annotationProcessor lib."annotation-api"
def querydslDir = "$buildDir/generated/querydsl"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
}
clean.doLast {
file(querydslDir).deleteDir()
}
}
...
}
댓글남기기