Jpa Query Dsl Where Condition


layout: post title: “[QueryDSL] like vs contains vs startswith” subtitle: “QueryDSL Where절 조건 검색문 비교” date: 2021-03-22 categories: Jpa tags: Query-Dsl comments: true


Like vs Contains vs StartsWith

모두 QueryDSL에서 Where절의 키워드 검색을 위한 구문입니다.

세 가지 모두 비슷하면서 다른 차이점이 각각 존재하며, 각 차이를 알아보기 전 아래와 같은 검색을 위한 메소드가 있다고 가정하겠습니다.

private final EntityManager em;
private final JPAQueryFactory queryFactory;

public List<Member> searchMemberWithKeyword(String keyword){
	return queryFactory
				.selectFrom(QMember.member)
				.where(QMember.member.name.like(keyword))
				.where(QMember.member.name.contains(keyword))
				.where(QMember.member.name.startsWith(keyword))
				.fetch();
}

각각의 차이점은 실제 JPA에서 쿼리가 발생할때 볼 수 있으며 차이점은 다음과 같습니다. like(keyword) == like = keyword // 해당 키워드와 완벽히 일치하는 것만 검색 contains(keyword) == like = %keyword% // 해당 키워드를 포함하는 것을 검색 startsWith(keyword) == like = keyword% // 해당 키워드로 시작하는 것을 검색

사소한 차이이지만 이 차이점으로 예상치 못한 검색결과가 발생하거나, 검색이 안되는등의 크리티컬한 문제가 발생할 수 있기 때문에, 정확히 잘 기억해두거나 애매할경우 정확히 확인 후 사용하는것을 권장합니다.