Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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
- docker compose
- ์๋ฐ
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- docker
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- redis ์กฐํ
- Entity
- docker-compose kafka
- Codedeploy ์ค๋ฅ
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- docker ps -a
- ๋ค์ค ์ปจํ ์ด๋
- @RestControllerAdvice
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- aws ์ฟ ํฐ
- aws saa ํฉ๊ฒฉ
- ํ์ดํผ๋ฐ์ด์
- JPA
- private subnet ec2 ๋ก์ปฌ ์ ์
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- redis ํ ์คํธ์ฝ๋
- ์คํํ๋ ๋ฏธ์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- prod docker-compose
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- AWS Certified Solutions Architect - Associate
- Kafka
- nGrinder
- s3 log ์ ์ฅ
Archives
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] QueryDSL ๋ฌธ๋ฒ ๋ณธ๋ฌธ
๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป/๐๐ฉ๐ซ๐ข๐ง๐
[Spring] QueryDSL ๋ฌธ๋ฒ
๐คRyusun๐ค 2023. 7. 20. 13:46๊ฒ์ ์กฐ๊ฑด
- member.username.eq("member1") // username = 'member1'
- member.username.ne("member1") //username != 'member1'
- member.username.eq("member1").not() // username != 'member1'
- member.username.isNotNull() //์ด๋ฆ์ด is not null
- member.age.in(10, 20) // age in (10,20)
- member.age.notIn(10, 20) // age not in (10, 20)
- member.age.between(10,30) //between 10, 30
- member.age.goe(30) // age >= 30
- member.age.gt(30) // age > 30
- member.age.loe(30) // age <= 30
- member.age.lt(30) // age < 30
- member.username.like("member%") //like ๊ฒ์
- member.username.contains("member") // like ‘%member%’ ๊ฒ์
- member.username.startsWith("member") //like ‘member%’ ๊ฒ์
where() ์ ํ๋ผ๋ฏธํฐ๋ก ๊ฒ์์กฐ๊ฑด์ ์ถ๊ฐํ๋ฉด AND ๋ก ์กฐ๊ฑด์ ์ถ๊ฐํ๋ฉด๋๋ค.
and ๋์ , ๋ก ๋์ฒด ๊ฐ๋ฅํ๋ค.
@Test
public void startQuerydsl2() {
//member1์ ์ฐพ์๋ผ.
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Member findMember = queryFactory
.select(member)
.from(member)
.where(member.username.eq("member1").and(member.age.eq(10)))//ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ
.fetchOne();
// qtype์ static import๋ก ์ฐ๋๊ฑธ ๊ถ์ฅํ๋ค.
assertThat(findMember.getUsername()).isEqualTo("member1");
}
@Test
public void startQuerydsl3() {
//member1์ ์ฐพ์๋ผ.
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Member findMember = queryFactory
.select(member)
.from(member)
.where(member.username.eq("member1"),
member.age.eq(10)) // and ๋์ ์ด๋ ๊ฒ ๋์ด๊ฐ๋ ๋๋ค.
.fetchOne();
// qtype์ static import๋ก ์ฐ๋๊ฑธ ๊ถ์ฅํ๋ค.
assertThat(findMember.getUsername()).isEqualTo("member1");
}
๋ํ qtype์ QMember m = QMember("member1")๋ฅผ ์์ฑํ๊ธฐ๋ณด๋ค๋ static import๋ก ์ฐ๋๊ฑธ ๊ถ์ฅํ๋ค.
๊ฒฐ๊ณผ ์กฐํ
- fetch() : ๋ฆฌ์คํธ ์กฐํ, ๋ฐ์ดํฐ ์์ผ๋ฉด ๋น ๋ฆฌ์คํธ ๋ฐํ
- fetchOne() : ๋จ ๊ฑด ์กฐํ
- ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด : null
- ๊ฒฐ๊ณผ๊ฐ ๋ ์ด์์ด๋ฉด : com.querydsl.core.NonUniqueResultException
- fetchFirst() : limit(1).fetchOne()
- fetchResults() : ํ์ด์ง ์ ๋ณด ํฌํจ, total count ์ฟผ๋ฆฌ ์ถ๊ฐ ์คํ
- fetchCount() : count ์ฟผ๋ฆฌ๋ก ๋ณ๊ฒฝํด์ count ์ ์กฐํ
@Test
public void startQuerydsl4(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
//๋ฆฌ์คํธ ์กฐํ
List<Member> fetch = queryFactory
.selectFrom(member)
.fetch();
//๋จ๊ฑด ์กฐํ
Member fetchOne = queryFactory
.selectFrom(member)
.fetchOne();
//์ฒ์ ํ ๊ฑด ์กฐํ
Member findMember2 = queryFactory
.selectFrom(member)
.fetchFirst();
//ํ์ด์ง์์ ์ฌ์ฉ
QueryResults<Member> results = queryFactory
.selectFrom(member)
.fetchResults();
results.getTotal();
List<Member> content = results.getResults();
//count ์ฟผ๋ฆฌ๋ก ๋ณ๊ฒฝ
long count = queryFactory
.selectFrom(member)
.fetchCount();
}
์ ๋ ฌ
/**
* ํ์ ์ ๋ ฌ ์์
* 1. ํ์ ๋์ด ๋ด๋ฆผ์ฐจ์(desc)
* 2. ํ์ ์ด๋ฆ ์ฌ๋ฆผ์ฐจ์(asc)
* ๋จ 2์์ ํ์ ์ด๋ฆ์ด ์์ผ๋ฉด ๋ง์ง๋ง์ ์ถ๋ ฅ(nulls last)
*/
@Test
public void sort() {
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
em.persist(new Member(null, 100));
em.persist(new Member("member5", 100));
em.persist(new Member("member6", 100));
List<Member> result = queryFactory
.selectFrom(member)
.where(member.age.eq(100))
.orderBy(member.age.desc(), member.username.asc().nullsLast())
.fetch();
Member member5 = result.get(0);
Member member6 = result.get(1);
Member memberNull = result.get(2);
assertThat(member5.getUsername()).isEqualTo("member5");
assertThat(member6.getUsername()).isEqualTo("member6");
assertThat(memberNull.getUsername()).isNull();
}
ํ์ด์ง ์กฐํ ๊ฑด์ ์ ํ
@Test
public void paging1(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<Member> result = queryFactory
.selectFrom(member)
.orderBy(member.username.desc())
.offset(1) //๋ช๊ฐ์ฉ skipํ ๊ฑด์ง, 0๋ถํฐ ์์
.limit(2) // ์ต๋ 2๊ฑด ์กฐํ
.fetch();
assertThat(result.size()).isEqualTo(2);
}
ํ์ด์ง ์ ์ฒด ์กฐํ
@Test
public void paging2() {
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QueryResults<Member> queryResults = queryFactory
.selectFrom(member)
.orderBy(member.username.desc())
.offset(1)
.limit(2)
.fetchResults();
assertThat(queryResults.getTotal()).isEqualTo(4);
assertThat(queryResults.getLimit()).isEqualTo(2);
assertThat(queryResults.getOffset()).isEqualTo(1);
assertThat(queryResults.getResults().size()).isEqualTo(2);
}
์งํฉ
//์งํฉ ํจ์
/**
* JPQL
* select
* COUNT(m), //ํ์์
* SUM(m.age), //๋์ด ํฉ
* AVG(m.age), //ํ๊ท ๋์ด
* MAX(m.age), //์ต๋ ๋์ด
* MIN(m.age) //์ต์ ๋์ด
* from Member m
*/
@Test
public void aggregation(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<Tuple> result = queryFactory
.select(member.count(),
member.age.sum(),
member.age.avg(),
member.age.max(),
member.age.min())
.from(member)
.fetch();
Tuple tuple = result.get(0);
assertThat(tuple.get(member.count())).isEqualTo(4);
assertThat(tuple.get(member.age.sum())).isEqualTo(100);
assertThat(tuple.get(member.age.avg())).isEqualTo(25);
assertThat(tuple.get(member.age.max())).isEqualTo(40);
assertThat(tuple.get(member.age.min())).isEqualTo(10)
}
@Test
public void aggregation2(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<Tuple> results = queryFactory
.select(team.name, member.age.avg())
.from(member)
.join(member.team, team) // member.team๊ณผ team์ join
.groupBy(team.name) // team ์ด๋ฆ์ผ๋ก ๊ทธ๋ฃนํ(๋ฌถ์)
.fetch();
Tuple teamA = results.get(0);
Tuple teamB = results.get(1);
assertThat(teamA.get(team.name)).isEqualTo("teamA");
assertThat(teamA.get(member.age.avg())).isEqualTo(15);
assertThat(teamB.get(team.name)).isEqualTo("teamB");
assertThat(teamB.get(member.age.avg())).isEqualTo(35);
}
groupBy , ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ ค๋ฉด having
groupBy(), having() ์์
groupBy(item.price)
.having(item.price.gt(1000))
'๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป > ๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] DTO ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํด์ผํ ๊น (0) | 2024.03.08 |
---|---|
[JPA] @Enumerated, @Converter (0) | 2023.08.26 |
[Spring] QueryDSL (0) | 2023.07.18 |
[Spring] ์์ธ ์ฒ๋ฆฌ (0) | 2023.06.30 |
[Spring] RestTemplate, UriComponentsBuilder (0) | 2023.06.28 |