728x90
QueryDSL을 작성하다 보면 종종 SQL Function을 사용해야 할 상황이 생긴다.
필자도 DB에 저장된 휴대폰번호를 동적쿼리로 조회하기 위해 replace 함수를 사용해야 했는데 이를 알아보고자 글을 작성했다.
SELECT *
FROM Employee
WHERE REPLACE(phone, '-', '') LIKE %var%
MySQL에서 replace를 사용한 예시
(이해하기 쉽게 동적 쿼리문을 임의로 작성했습니다)
String search = "123"; // 검색할 문자열 (123 부분은 동적으로 들어오는 상황)
QEmployee employee = QEmployee.employee;
// replace 함수를 포함한 StringTemplate 생성
StringTemplate phoneTemplate = Expressions.stringTemplate("replace({0}, '-', '')", employee.phone);
// WHERE 절에 사용할 BooleanExpression 생성
BooleanExpression phoneCondition = phoneTemplate.contains(search);
QueryDSL에선 Expressions.stringTemplate을 통해 replace함수를 사용한 StringTemplate을 가져올 수 있다.
Where절에 추가하기 위해 BooleanExpression으로 변환.
List<Employee> results = queryFactory
.selectFrom(employee)
.where(phoneCondition)
.fetch();
BooleanExpression 실제 사용 예시
'JPA' 카테고리의 다른 글
[QueryDSL] 중급 문법 (프로젝션, 동적 쿼리) (0) | 2024.06.20 |
---|---|
[QueryDSL] 동적 쿼리 게시물 조회 기능 구현 (기본문법) (2) | 2024.06.16 |
자바 ORM 표준 JPA 기본편 - 영속성 전이 (0) | 2024.04.24 |
자바 ORM 표준 JPA 기본편 - 프록시와 연관관계 관리 (0) | 2024.04.17 |
자바 ORM 표준 JPA 기본편 - 고급매핑 (0) | 2024.04.12 |