Querydsl 란?
자바코드를 기반으로 쿼리를 작성하고 조회할때 검색조건을 통해 조회를 할수있다.
gradle import
//queryDSL 설정
implementation "com.querydsl:querydsl-jpa"
implementation "com.querydsl:querydsl-core"
implementation "com.querydsl:querydsl-collections"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
테스트 용도로 Qclass
//Querydsl 설정부
def generated = 'src/main/generated'
// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile){
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
//java source set 에 querydsl QClass 위치 추가
sourceSets{
main.java.srcDirs += [generated]
}
//gradle clean 시에 QClass 디렉토리 삭제
clean{
delete file(generated)
}
검색 기능을 하는 매서드
QuerydslPredicateExecutor<Article>,
QuerydslBinderCustomizer<QArticle>
QuerydslPredicateExecutor<Article> Article Entity 를 통해 모든 검색을 허용한다. 단, 정확하게 입력을 해야한다.
QuerydslBinderCustomizer<QArticle> Article Entity 를 통해 검색을 커스텀 즉, 검색하는 방법을 재구현할수있다.
@Override
default void customize(QuerydslBindings bindings, QArticle root) {
}
오버라이드를 통해 재 구현시켜야한다. QuerydslBinderCustomizer 인터페이스 이므로 구현이 불가능 하므로
default 로 구현을 한다. java 8 버전이상부트넌 default 로 인터페이스를 구현할수 있게 한것같다. ( 검색결과)
customize 매서드 안에서 내가 원하는 검색으로 바꿀수 있다.
bindings.excludeUnlistedProperties(true)
바인딩할 대상이 없는 속성을 제외한다.
bindings.including(root.title);
인터페이스의 customize 메서드에서 Querydsl 바인딩 규칙을 설정한다. 즉, root.title 로만 검색할것이다. 라는 뜻이다.
bindings.bind(root.title).first(StringExpression::containsIgnoreCase);
title 의 바인딩 규칙을 만든다. 검색해서 나오는 값 첫번째를 가져온다. 즉, title 에서 검색하는데 sql 문 '%OO%' OO 검색을 하게 되면 %% 로 부분 검색이 가능하게 한다.
bindings.bind(root.title).first(StringExpression::likeIgnoreCase);
title 의 바인딩 규칙을 만든다. 검색해서 나오는 값 첫번째를 가져온다. 즉, title 에서 검색하는데 sql 문 'OO' OO 검색을 하게 되면 OO 로 부분 검색이 불가능해지고 정밀 검색이 가능하다.
메서드 설명
first() | 컬렉션의 첫 번째 요소에 대한 값을 바인딩합니다. |
as(String path) | 바인딩할 경로를 명시적으로 설정합니다. |
asEnum(Class<T> type) | 열거형 타입으로 변환하여 값을 바인딩합니다. |
asList() | 컬렉션의 모든 요소에 대한 값을 바인딩합니다. |
asSingle() | 단일 값 필드에 대한 값을 바인딩합니다. |
asBoolean() | boolean 타입 필드에 대한 값을 바인딩합니다. |
asNumber(Class<T> type) | 숫자 타입 필드에 대한 값을 바인딩합니다. |
asText() | 문자열 타입 필드에 대한 값을 바인딩합니다. |
withDefault(Supplier<? extends T> supplier) | 값이 없을 경우 기본값을 설정합니다. |
withNullAsDefault() | 값이 null일 경우 기본값을 설정합니다. |
'Spring' 카테고리의 다른 글
Websocket (1) (0) | 2023.05.21 |
---|---|
thymeleaf (0) | 2023.05.20 |
Rest Repositories (0) | 2023.05.19 |
DTO, Entity, Response 연관관계 (0) | 2023.05.16 |
JUnit5, AssertJ (0) | 2023.05.11 |