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 | 29 | 30 | 31 |
Tags
- kotlin
- Thymeleaf
- SpringBoot
- JDBC
- 인프런
- JPQL
- http
- AOP
- springdatajpa
- jpa
- Proxy
- 알고리즘
- 스프링
- db
- Android
- Greedy
- 자바
- spring
- 김영한
- 스프링 핵심 원리
- QueryDSL
- transaction
- Spring Boot
- Servlet
- Exception
- 백준
- 스프링 핵심 기능
- pointcut
- java
- 그리디
Archives
- Today
- Total
개발자되기 프로젝트
동적쿼리 : BooleanBuilder, Where 다중 파라미터 본문
1. 동적쿼리 두 가지 방법
- BooleanBuilder
- Where 다중 파라미터 사용
2. BooleanBuilder
- booleanBuilder에 and, or 조건 추가 가능.
private List<Member> searchMember1(String usernameCon, Integer ageCon) {
BooleanBuilder builder = new BooleanBuilder();
if(usernameCon != null){
builder.and(member.username.eq(usernameCon)); //booleanbuild에 and조건 추가
}
if(ageCon!=null){
builder.and(member.age.eq(ageCon));
}
return queryFactory
.selectFrom(member)
.where(builder)
.fetch();
}
select
member1
from
Member member1
where
member1.username = ?1
and member1.age = ?2
3. Where 다중 파라미터 사용 : 히힛
- ㅠwhere의 조건들은 and로 묶임
- where 조건에 null 값은 무시된다.
- 메서드를 다른 쿼리에서도 재활용 할 수 있다.
- 쿼리 자체의 가독성이 높아진다.
@Test
public void dynamicQuery_WhereParam(){
String usernameParam = "member1";
Integer ageParam = 10;
List<Member> result = searchMember2(usernameParam, ageParam);
assertThat(result.size()).isEqualTo(1);
}
private List<Member> searchMember2(String usernameCon, Integer ageCon) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCon), ageEq(ageCon)) //where에 null들어가면 무시. 여러 조건이 들어가면 and로 처리됨.
.fetch();
}
private BooleanExpression usernameEq(String usernameCon) {
return usernameCon == null ? null : member.username.eq(usernameCon);
}
private BooleanExpression ageEq(Integer ageCon) {
return ageCon == null ? null : member.age.eq(ageCon);
}
select
member1
from
Member member1
where
member1.username = ?1
and member1.age = ?2
- 심지서 각 where 조건은 메서드로 뽑았기 때문에 조립도 가능.
@Test
public void dynamicQuery_WhereParam(){
String usernameParam = "member1";
Integer ageParam = 10;
List<Member> result = searchMember2(usernameParam, ageParam);
assertThat(result.size()).isEqualTo(1);
}
private List<Member> searchMember2(String usernameCon, Integer ageCon) {
return queryFactory
.selectFrom(member)
//.where(usernameEq(usernameCon), ageEq(ageCon)) //where에 null들어가면 무시. 여러 조건이 들어가면 and로 처리됨.
.where(allEq(usernameCon, ageCon))
.fetch();
}
private BooleanExpression usernameEq(String usernameCon) {
return usernameCon == null ? null : member.username.eq(usernameCon);
}
private BooleanExpression ageEq(Integer ageCon) {
return ageCon == null ? null : member.age.eq(ageCon);
}
private BooleanExpression allEq(String usernameCon, Integer ageCon){
return usernameEq(usernameCon).and(ageEq(ageCon));
}
4. GitHub : 210903 Dynamic Query
'인프런 > [인프런] QueryDsl' 카테고리의 다른 글
SQL Function 호출 (0) | 2021.09.04 |
---|---|
벌크 연산 (0) | 2021.09.04 |
프로젝션과 결과 반환 : DTO, @QueryProjection (0) | 2021.09.03 |
프로젝션과 결과 반환 - DTO 조회 (0) | 2021.09.03 |
프로젝션과 결과 반환 (0) | 2021.09.03 |
Comments