특정 문자열을 포함하는 검색 쿼리를 작성해보자.
다음 예제는 이메일에 test 라는 문자열을 포함한 사용자를 검색하는 쿼리다.
SELECT *
FROM user
WHERE email LIKE '%test%';
위와 같은 쿼리를 QueryDSL
을 사용하여 type-safe
하게 작성해보자.
like
메서드를 사용하더라도 검색어를 %로 감싸주어야 한다.
String keyword = "test";
JPAQuery query = new JPAQuery(entityManager);
QUser qUser = QUser.user;
List<User> list = query.from(qUser)
.where(qUser.email.like("%" + keyword + "%"))
.list(qUser);
// binding param - %test%
그러나 contains
메서드를 사용하면 직접 감싸주지 않아도 자동으로 바인딩된다.
String keyword = "test";
JPAQuery query = new JPAQuery(entityManager);
QUser qUser = QUser.user;
List<User> list = query.from(qUser)
.where(qUser.email.contains(keyword))
.list(qUser);
// binding param - %test%
두 메서드의 차이를 기억하자.