jpa

[JPA] QueryDSL JPA 사용하기

2023. 8. 9. 08:40
목차
  1. QueryDSL이란?
  2. QEntity만들기
  3. Querying
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
반응형

'jpa' 카테고리의 다른 글

[JPA] Spring Data JPA의 Page객체에 대한 설명  (0) 2025.03.26
[jpa] name-native-query 에러 Could not locate appropriate constructor on class  (0) 2023.08.09
[jpa] Spring Data Jpa는 왜 interface만 생성해줘도 작동할까? + Spring Data Jpa 확장하기  (0) 2023.08.08
[JPA] entity uses both @NotFound(action = NotFoundAction.IGNORE) and FetchType.LAZY. The NotFoundAction.IGNORE @ManyToOne and @OneToOne associations are always fetched eagerly.  (0) 2023.07.17
[jpa] 지연로딩과 즉시로딩 FetchType.EAGER, LAZY, 프록시  (0) 2023.03.31
  1. QueryDSL이란?
  2. QEntity만들기
  3. Querying
'jpa' 카테고리의 다른 글
  • [JPA] Spring Data JPA의 Page객체에 대한 설명
  • [jpa] name-native-query 에러 Could not locate appropriate constructor on class
  • [jpa] Spring Data Jpa는 왜 interface만 생성해줘도 작동할까? + Spring Data Jpa 확장하기
  • [JPA] entity uses both @NotFound(action = NotFoundAction.IGNORE) and FetchType.LAZY. The NotFoundAction.IGNORE @ManyToOne and @OneToOne associations are always fetched eagerly.
우주유령
우주유령
우주유령
우주
우주유령
전체
오늘
어제
반응형
  • 분류 전체보기 (131)
    • javascript (28)
    • java (26)
    • Web (16)
    • React (7)
    • SQL (2)
    • Spring (20)
    • IntelliJ (6)
    • JSP (1)
    • Notion (1)
    • VScode (8)
    • Vue (3)
    • css (1)
    • tistory (1)
    • jpa (8)
    • 책 (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

최근 글

hELLO · Designed By 정상우.
우주유령
[JPA] QueryDSL JPA 사용하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.