JPQL을 작성해 데이터 베이스에서 값을 가져오는 방법
- JPA 구현체에서 자동으로 쿼리문 해석 및 실행
- DB에 특화된 SQL 작성 가능하며, 주로 튜닝된 쿼리를 사용하고자 할 때 SQL 작성
작성법
@Query("select p from Product p whrer p.name = :name")
List<Product> findByNameParam(@Param("name") String name);
@Query 어노테이션은 직접 문자열 입력하므로 컴파일 시점의 에러 잡지 못하고 런타임 에러 발생 할 수 있음.
Q도메인
을 이용해야만 한다.buildscript {
ext {
queryDslVersion="5.0.0"
}
}
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
annotationProcessor(
"javax.persistence:javax.persistence-api",
"javax.annotation:javax.annotation-api",
"com.querydsl:querydsl-apt:${queryDslVersion}:jpa"
)
sourceSets{ // 저장소 지정
main{
java{
srcDirs=["$projectDir/src/main/java", "$projectDir/build/generated/sources/annotationProcessor/java/main/"]
}
}}
compileJava.dependsOn("clean")
public interface -Repository extends JpaRepository<EN, T>, QuerydslPredicateExecutor<EN>
@Test
public void testQuery(){
Pageable pageable = PageRequest.of(0,10.Sort.by("params").descending());
QEntity qEntity = QEntity.entity;
String keyword = "keyword";
BooleanBuilder builder = new BooleanBuilder();
BooleanExpression expression = qEntity.title.contains(keyword);
builder.and(qEntity.param.gt(0L));
builder.and(expression);
Page<Entity> result = EntityRepository.findAll(builder, pageable);
result.stream().forEach(entity->{
System.out.println(entity);
})
}
QEntity qEntity = QEntity.entity;
BooleanBuilder builder = new BooleanBuilder();
BooleanExpression expression = qEntity.title.contains(keywrod);
builder.and(expression);
Page<Entity> result = EntityRepository.findAll(builder, pageable);