예시로 하나
@Test
public void search(){
Member result = query.selectFrom(m)
.where(m.username.eq("member1").and(m.age.eq(10)))
.fetchOne();
assertThat(result.getUsername()).isEqualTo("member1");
}
지금은 조건문은 eq, 조건 연결문?은 and만 썼는데,
엄청 많음
m.username.eq("member1") // username = 'member1'
m.usernmae.ne("member1") // username != 'member1' 즉 not equal
m.username.eq("member1").not() // username != 'member1' 기존 조건식에 ! 붙여주는 그런 거 인듯?
m.username.isNotNull() // null이 아니면 true 리턴
m.age.in(10,20) // age in (10, 20)
m.age.notIn(10, 20) // age not in(10, 20)
m.age.between(10, 30) // between 10, 30
m.age.goe(30) // age >= 30 즉 greate then or equal
m.age.gt(30) // age > 30 즉 greate then
m.age.lt(30) // age < 30 즉 less then
m.age.loe(30) // age <= 30 즉 less then or eqaul
m.username.like("member%") // like 'member%' 퍼센트는 원하는 곳에 넣어주면 됨.
m.username.contains("member") // like '%member%' 퍼센트를 알아서 넣어줌. contains 이니
m.username.startsWith("member") // like 'member%' 이것도 퍼센트를 알아서 넣어줌. endsWith도 있음.
이렇게 그냥 sql에 있는 조건식은 다 있다고 생각하면 됨. 다만 메소드로 한다는 거
참고로, and는
@Test
public void search(){
Member result = query.selectFrom(m)
.where(
m.username.eq("member1"),
m.age.eq(10)
)
.fetchOne();
assertThat(result.getUsername()).isEqualTo("member1");
}
where 안에서는 저렇게 인자들로 여러 개 넘기면 and로 연결함.
들어가는 인자 보면
Predicate... 이렇게 넣어놓은 만큼 배열로 가져오도록 해놓음.
내부적으로 오버라이드도 되어 있을거임.
그래서 이렇게 and 같은 경우는 여러 방법으로 짤 수 있는데,
어떤 방법을 하든 자유지만, and만 있을 경우는 저렇게 인자로 여러 조건들을 넣어주면 좋은게,
null은 무시함.
즉, 저 조건 객체들 생성하는데 조건을 안 넣었을 경우 그냥 그걸 null로 만들어 버리면,
동적 쿼리 짜기 너무 편함.
'스프링데이터 + JPA > QueryDSL' 카테고리의 다른 글
11. 정렬 (0) | 2023.11.28 |
---|---|
10. 결과 조회 (0) | 2023.11.28 |
8. Q타입 (0) | 2023.11.28 |
7. JPQL vs QueryDSL (0) | 2023.11.28 |
6. 예제 도메인 모델 (0) | 2023.11.28 |