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/
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
반응형