728x90
반응형
QueryDSL이란?
QueryDSL은 오픈소스 프로젝트로 처음에는 HQL을 코드로 작성해줄 수 있는 프로젝트로 시작해서 지금은 JPA, JDO, JDBC, Lucene, Hibernate Search, mongoDB, 자바 컬렉션 등 다양하게 지원한다.
JPQL과 달리 문자가아닌 코드로 작성하므로 오류를 덜 수 있고, Criteria보다는 덜 복잡하다는 장점이 있다.
http://querydsl.com/static/querydsl/3.6.3/reference/ko-KR/html_single/
Querydsl - 레퍼런스 문서
본 절에서는 SQL 모듈의 쿼라 타입 생성과 쿼리 기능을 설명한다. com.mysema.query.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어
querydsl.com
3.6.3버전은 최범균님이 번역한 한글 분서를 제공한다고 한다.
QEntity만들기
사용하려면 먼저 QEntity가 만들어져 있어야 한다.
intellij라면 아래에서 compileQuerydsl을 누르자.
gradle>task>other>compileQuerydsl
Querying
먼저 JPAQuery객체를 만들어야한다. 이때 파라메터로 entityManger를 넘겨준다.
public void queryDSL() {
EntityManager em = emf.createEntityManager();
JPAQuery query = new JPAQuery(em); //JPAQuery를 만들고 entityManager를 parameter로 넘겨줌
QMember qMember = new QMember("m"); //m이라는 별칭. jpql을 만들 때 사용됨.
List<Memeber> members =
query.from(qMember)
.where(qMember.name.eq("회원1"))
.orderBy(qMember.name.desc())
.list(qMember);
}
Q타입(쿼리타입)은 사용하기 편리하도록 미리 기본 인스턴스가 만들어져있다.
public class QMember extends EntityPathBase<Member> {
public static final QMember member = new QMember("member1");
...
}
따라서 이렇게 쓸 수도 있다.
QMember qMebmer = new QMember("m");
QMember qMember = QMember.member; //위와 같음
import static을 활용하면 더 간단하게 작성할 수 있다.
import static jpabook.jpasho.domain.QMember.member;
public void queryDSL() {
EntityManager em = emf.createEntityManager();
JPAQuery query = new JPAQuery(em); //JPAQuery를 만들고 entityManager를 parameter로 넘겨줌
List<Memeber> members =
query.from(member)
.where(member.name.eq("회원1").and(member.age.eq(11))
.orderBy(member.name.desc())
.list(member);
}
728x90
반응형