Skip to content

Commit cd4a1a8

Browse files
committed
QueryDSL 섹션 1
1 parent e4e0bb1 commit cd4a1a8

File tree

8 files changed

+216
-1
lines changed

8 files changed

+216
-1
lines changed

querydsl/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ dependencies {
2828
runtimeOnly 'com.h2database:h2'
2929
annotationProcessor 'org.projectlombok:lombok'
3030
testImplementation 'org.springframework.boot:spring-boot-starter-test'
31+
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
32+
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
33+
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
34+
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
3135
}
3236

3337
tasks.named('test') {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.querydsl.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Entity
8+
@Getter
9+
@Setter
10+
public class Hello {
11+
@Id
12+
@GeneratedValue(strategy = GenerationType.IDENTITY)
13+
private Long id;
14+
15+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package dev.querydsl.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.*;
5+
6+
@Entity
7+
@Getter
8+
@Setter
9+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
10+
@ToString(of = {"id", "username", "age"})
11+
public class Member {
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.IDENTITY)
14+
@Column(name = "member_id")
15+
private Long id;
16+
private String username;
17+
private int age;
18+
@ManyToOne(fetch = FetchType.LAZY)
19+
@JoinColumn(name = "team_id")
20+
private Team team;
21+
22+
public Member(String username) {
23+
this(username, 0);
24+
}
25+
26+
public Member(String username, int age) {
27+
this(username, age, null);
28+
}
29+
30+
public Member(String username, int age, Team team) {
31+
this.username = username;
32+
this.age = age;
33+
if (team != null) {
34+
changeTeam(team);
35+
}
36+
}
37+
38+
public void changeTeam(Team team) {
39+
this.team = team;
40+
team.getMembers().add(this);
41+
}
42+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.querydsl.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.*;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
@Entity
10+
@Getter
11+
@Setter
12+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
13+
@ToString(of = {"id", "name"})
14+
public class Team {
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
@Column(name = "team_id")
18+
private Long id;
19+
20+
private String name;
21+
22+
@OneToMany(mappedBy = "team")
23+
private List<Member> members = new ArrayList<>();
24+
25+
public Team(String name) {
26+
this.name = name;
27+
}
28+
}

querydsl/src/main/resources/application.properties

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
spring:
3+
datasource:
4+
url: jdbc:h2:tcp://localhost/~/test
5+
username: sa
6+
password:
7+
driver-class-name: org.h2.Driver
8+
9+
jpa:
10+
hibernate:
11+
ddl-auto: create
12+
properties:
13+
hibernate:
14+
format_sql: true
15+
show_sql: true
16+
17+
logging.level:
18+
org.hibernate.SQL: debug
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package dev.querydsl;
2+
3+
import com.querydsl.jpa.impl.JPAQueryFactory;
4+
import dev.querydsl.entity.Member;
5+
import dev.querydsl.entity.QMember;
6+
import dev.querydsl.entity.Team;
7+
import jakarta.persistence.EntityManager;
8+
import org.assertj.core.api.Assertions;
9+
import org.junit.jupiter.api.BeforeEach;
10+
import org.junit.jupiter.api.Test;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.boot.test.context.SpringBootTest;
13+
import org.springframework.transaction.annotation.Transactional;
14+
15+
@SpringBootTest
16+
@Transactional
17+
public class QuerydslBasicTest {
18+
19+
@Autowired
20+
EntityManager em;
21+
22+
@BeforeEach
23+
void before() {
24+
Team teamA = new Team("teamA");
25+
Team teamB = new Team("teamB");
26+
em.persist(teamA);
27+
em.persist(teamB);
28+
Member member1 = new Member("member1", 10, teamA);
29+
Member member2 = new Member("member2", 20, teamA);
30+
Member member3 = new Member("member3", 30, teamB);
31+
Member member4 = new Member("member4", 40, teamB);
32+
em.persist(member1);
33+
em.persist(member2);
34+
em.persist(member3);
35+
em.persist(member4);
36+
}
37+
38+
@Test
39+
void startJPQL() {
40+
String qlString = """
41+
select m from Member m
42+
where m.username = :username
43+
""";
44+
45+
Member findMember = em.createQuery(qlString, Member.class)
46+
.setParameter("username", "member1")
47+
.getSingleResult();
48+
49+
Assertions.assertThat(findMember.getUsername()).isEqualTo("member1");
50+
}
51+
52+
@Test
53+
void startQuerydsl() {
54+
55+
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
56+
QMember m = new QMember("m");
57+
58+
Member findMember = queryFactory
59+
.select(m)
60+
.from(m)
61+
.where(m.username.eq("member1"))
62+
.fetchOne();
63+
64+
Assertions.assertThat(findMember.getUsername()).isEqualTo("member1");
65+
}
66+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dev.querydsl.entity;
2+
3+
import jakarta.persistence.EntityManager;
4+
import jakarta.transaction.Transactional;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.boot.test.context.SpringBootTest;
8+
import org.springframework.test.annotation.Commit;
9+
10+
import java.util.List;
11+
12+
@SpringBootTest
13+
@Transactional
14+
class MemberTest {
15+
16+
@Autowired
17+
EntityManager em;
18+
19+
@Test
20+
public void testEntity() {
21+
Team teamA = new Team("teamA");
22+
Team teamB = new Team("teamB");
23+
em.persist(teamA);
24+
em.persist(teamB);
25+
Member member1 = new Member("member1", 10, teamA);
26+
Member member2 = new Member("member2", 20, teamA);
27+
Member member3 = new Member("member3", 30, teamB);
28+
Member member4 = new Member("member4", 40, teamB);
29+
em.persist(member1);
30+
em.persist(member2);
31+
em.persist(member3);
32+
em.persist(member4);
33+
em.flush();
34+
em.clear();
35+
List<Member> members = em.createQuery("select m from Member m",
36+
Member.class)
37+
.getResultList();
38+
for (Member member : members) {
39+
System.out.println("member=" + member);
40+
System.out.println("-> member.team=" + member.getTeam());
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)