TIL

220822 JPQL, querydsl

하얀잔디 2022. 8. 22. 18:08

JPQL 기본문법 : select m from Member m where m.username = :username

 

-> 테이블 별칭이 필요하다.

 

.setParameter("username","member1")

이런식으로 username에 들어갈것도 넣음.

 

 

 

---

 

and 할때

.where(
        member.username.eq("member1"),
        member.age.eq(10)
)

or

.where(
        member.username.eq("member1").and(member.age.eq(10))
)

둘 다 가능

여러개 가능. null도 없어서 전자가 좋음.

 

리스트 조회 : fetch() // 데이터 없으면 빈 리스트

 

fetchOne() // 데이터 없으면 null, 둘 이상이면 NonUniqueResultException.

 

fetchFirst()

fetchResults()// 페이지 정보 포함 count 쿼리

 

 

.orderBy(member.age.desc(), member.username.asc().nullsLast())

이런식으로도 가능.

 

페이징을 원하면

 

.offset(1)
.limit(2)

 

이런식으로 중간에 offset과 limit을 지정하면 방언에 따라 맞춰서 들어감.

 

List<Tuple> result = queryFactory.select(
                member.count(),
                member.age.sum(),
                member.age.avg(),
                member.age.max()
        )
        .from(member)
        .fetch();

 

Tuple 형태로 값이 들어옴.

-> Tuple을 가져오려면

 

Tuple tuple = result.get(0);
assertThat(tuple.get(member.count())).isEqualTo(4);

 

이런식으로 그냥 구조체라고 보면 되는것 같다.

---

 

//팀의 이름과 각 팀의 연령
void group() throws Exception {
    //given
    List<Tuple> result = queryFactory.select(team.name, member.age.avg())
            .from(member)
            .join(member.team, team)    //멤버에 있는 팀과, 팀을 조인
            .groupBy(team.name)         //team의 이름으로 grouping.
            .fetch();

group By 와  join 한번 다시 봐보기.

 

---

 

 

'TIL' 카테고리의 다른 글

220823 동적 쿼리 처리  (0) 2022.08.23
220823 Query _ FetchOne, FetchFrist..  (0) 2022.08.23
220819 @Transient , Stream에 대해  (2) 2022.08.19
Response 헤더 정리  (0) 2022.08.18
스프링 실행시 나타나는 화면 해석  (0) 2022.08.18