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 |