일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 9095번
- 12869번
- 베스트엘범
- 1038번
- 거울 설치
- 스타트 택시
- 감소하는 수
- 파이썬
- 보석 쇼핑
- 16234번
- 어른 상어
- 백준 알고리즘
- QueryDSL 기초
- 경주로 건설
- 17144번
- 2020 카카오 인턴십
- 19238번
- 1789번
- 빛의 경로 사이클
- 키패드 누르기
- 수식 최대화
- 프로그래머스
- 미세먼지 안녕!
- SW ExpertAcademy
- 15686번
- 14499번
- python
- HTML 기초
- 12865번
- SW Expert Academy
Archives
- Today
- Total
보물창고 블로그
QueryDSL 기초 정리 본문
728x90
이 글에서는 QueryDSL의 기초 사용법에 대해 정리하고자 합니다.
먼저 QueryDSL은 쿼리를 자바 코드로 작성할 수 있게 도와주는 기술입니다.
Spring Data JPA로 해결하지 못하는 복잡한 쿼리/동적 쿼리를 쉽게 해결할 수 있습니다.
자바 코드로 작성하기 때문에 문법 오류를 컴파일 시점에 잡아낼 수 있습니다.
먼저 저는 빌드 도구로 Gradle을 사용하므로 build.grade 파일에 dependencies에 아래 내용을 추가합니다.
implementation 'com.querydsl:querydsl-jpa'
// Querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor("jakarta.persistence:jakarta.persistence-api")
annotationProcessor("jakarta.annotation:jakarta.annotation-api")
다음으로 예시에 사용할 도메인 모델에 대한 엔티티 클래스와 ERD는 아래와 같습니다.
위의 엔티티 클래스 다이어그램대로 사용하기 위해 Member 객체를 아래와 같이 선언합니다.
@Entity
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
private String username;
private int age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
public Member(String username, int age, Team team) {
this.username = username;
this.age = age;
if(team != null){
changeTeam(team);
}
}
private void changeTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
public Member(String username){
this(username,0,null);
}
public Member(String username,int age){
this(username,age,null);
}
@Override
public String toString() {
return "Member{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
}
}
추가적으로 Team 객체도 아래와 같이 선언합니다.
@Entity
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
public Team(String name){
this.name = name;
}
@Override
public String toString() {
return "Team{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
이후 프로젝트 빌드를 한번 해주면 아래 사진과 같이 generated 폴더 안에 Q 클래스들이 생성되는 것을 확인할 수 있습니다.
이 Q클래스를 활용하여 QueryDSL을 사용할 수 있습니다.
여기까지 하였다면 QueryDSL을 사용할 준비가 끝났습니다.
다음 글에서는 QueryDSL을 본격적으로 테스트해보겠습니다.
Comments